我只是在学习数据库语法,如果这不是一个相关问题,对不起。
我正在尝试在满足条件时更改列的文本。我尝试了很多事情,但没有取得任何成就。
|---------------------|------------------|------------------|
| 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 |
|------------------------------------------------------------
答案 0 :(得分:1)
使用case when
和Year
函数将日期转换为年份
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)
日期比较不需要任何功能,只需进行日期比较即可。