SQL-满足条件时更改列的文本

SQL-change the text of a column when a condition is meet

我刚刚学习数据库语法,如果这不是一个相关问题,我很抱歉。

我正在尝试在满足条件时更改列的文本。我尝试了很多事情,但没有取得任何成就。

|---------------------|------------------|------------------|
|      Some PK        |     Some FK      |  someDatetime    |
|---------------------|------------------|------------------|
|          12         |         34       |     1900/01/01   |
|---------------------|------------------|------------------|
|          13         |         54       |    2018/05/32    |        
|---------------------|------------------|------------------|
|          15         |         60       |   2000/01/01     |
|------------------------------------------------------------

我需要的是显示相同的 table,但是当日期低于 2018 年时(我知道可以通过 where 实现),查询会返回:

|---------------------|------------------|------------------|
|      Some PK        |     Some FK      |  someDatetime    |
|---------------------|------------------|------------------|
|          12         |         34       |     ----------   |
|                     |                  |  or My own string|
|---------------------|------------------|------------------|
|          13         |         54       |    2018/05/32    |        
|---------------------|------------------|------------------|
|          15         |         60       |   ----------     |
|                     |                  | or My own string |
|------------------------------------------------------------

使用 case whenYear 函数将日期转换为年份

select some_PK,some_FK,
case when  Year(someDatetime)<'2018' then 'My own string' else someDatetime 
end as someDatetime    
from yourtable

您可以使用 YEAR 函数来检查日期:

SELECT
    PK,
    FK,
    CASE WHEN YEAR(someDatetime) < 2018
         THEN 'my own string'
         ELSE CONVERT(VARCHAR, someDatetime, 120) END AS someDatetime
FROM yourTable;

请注意,如果您想在消息中生成文本列,如果年份早于 2018 年,则整个 CASE 表达式都应生成文本。因此,我们可以在日期时间列上使用 CONVERT 来生成日期的文本版本。

你为什么不这样做:

select . . . ,
       (case when someDateTime < '2018-01-01'
             then 'my own string'
             else convert(varchar(255), someDateTime)  -- might want to include a format
        end)

日期比较不需要函数,只是日期比较。