pun*_*ter 0 sql sql-server sql-server-2008
我有一个门户网站,如果日期是今天的日期,应该只显示时间,否则它应该显示日期.
dossier_date_created | Expected result
----------------------------------------------------
2013-10-22 16:18:46.610 | 2013-10-22
2013-10-23 11:26:56.390 | 11:26
Run Code Online (Sandbox Code Playgroud)
我试过这样的事情:
select
case
when CONVERT(date,dossier_date_created) = CONVERT(DATE,getdate()) then convert(char(5), dossier_date_created, 108)
else convert(date, dossier_date_created)
end as timedate
from Proj_Manage_Dossier
Run Code Online (Sandbox Code Playgroud)
但结果是:
timedate
-----------
2013-10-22
1900-01-01
Run Code Online (Sandbox Code Playgroud)
我怎么能只用SQL做?我的专栏"dossier_date_created"的btw数据类型是datetime
您可以使用CAST或CONVERT获取值DATE或TIME数据类型.但是,由于你不能在同一列中组合两种数据类型,你必须将它们都转换成相同的东西 - 比如NVARCHAR之后:
SELECT CASE WHEN CAST(dossier_date_created AS DATE) = CAST(GETDATE() AS DATE)
THEN CAST(CAST (dossier_date_created AS TIME) AS NVARCHAR(10))
ELSE CAST(CAST(dossier_date_created AS DATE) AS NVARCHAR(10)) END
FROM dbo.Proj_Manage_Dossier
Run Code Online (Sandbox Code Playgroud)
编辑 -对于SQL Server版本较旧的然后2008年,那里有没有日期和时间数据类型-您也可以直接CONVERT到VARCHAR 使用适当的样式代码.
SELECT CASE WHEN CONVERT(VARCHAR(10),dossier_date_created,102) = CONVERT(VARCHAR(12),GETDATE(),102)
THEN CONVERT(VARCHAR(10),dossier_date_created,108)
ELSE CONVERT(VARCHAR(10),dossier_date_created,102) END
FROM dbo.Proj_Manage_Dossier
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |