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

时间:2018-07-28 15:40:41

标签: sql sql-server where-clause

我只是在学习数据库语法,如果这不是一个相关问题,对不起。

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

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

我需要显示同一张表,但是当日期从2018年开始降低(我知道可以通过where来实现)时,查询将带回来:

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可以使用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表达式应生成文本。因此,我们可以在datetime列上使用CONVERT来生成日期的文本版本。

答案 2 :(得分:0)

你为什么不这样做:

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

日期比较不需要任何功能,只需进行日期比较即可。