我正在尝试将日期字段显示为只是' Jan'所以一个3个字母的缩写。
我正在尝试
try_convert(char(3),Datename(Month,[Date]))
但是当我从字符串中转换日期和/或时间时,转换失败'
我理解这是因为日期存储为varchar但显示为dd-mm-yyyy 12:53:34:300。
无论如何,我可以显示日期中的月份缩写,而不会将日期字段从varchar更改为日期。
由于
答案 0 :(得分:2)
更好的问题是,为什么要将日期存储为varchar
。的不要即可。你不应该这么做的原因很多,老实说我不知道为什么你应该这么做。
作为一个简单的例子,{date} '31-01-2000'
在<{strong> '09-12-2017'
之后的varchar
条件中 。因此,WHERE [varcharDateColumn] <= '09-12-2017'
的查询不会返回上述第一天的项目。因此,您必须使用CONVERT
/ CAST
,这意味着您无法使用任何索引。
对于你所拥有的,正确的代码(可能)是:
LEFT(DATENAME(MONTH,TRY_CONVERT(date,[Date])),3)
但是,我强烈建议您修复数据类型,然后不需要使用TRY_CONVERT
。
答案 1 :(得分:0)
您的查询稍有变化可以帮助您。试试这个
Array
(
[1] => B66
[2] => BB5
[3] => BB6
[4] => BD2
[5] => BD3
[6] => BD4
[7] => BD5
[8] => BD6
[9] => BD7
[10] => BD8
[11] => BD9
[0] => S9
)
答案 2 :(得分:0)
您使用的是SQL Server 2012+ ..您可以使用FORMAT功能..您的日期列是否有有效日期..如果您不能使用ISDate()函数来验证它们。
SELECT FORMAT(GETDATE(),'MMM')
<强>输出强>
Jan
答案 3 :(得分:0)
试试这个:
--successfully converts date in dd-mm-yyyy fromat, stored as string
select parse('29-12-2017' as date using 'en-GB')
--displays three-letter abbreviation of month
select FORMAT(parse('29-12-2017' as date using 'en-GB'), 'MMM') --> will return Dec
因此,只需用您的列名替换传递的字符串'29-12-2017'
,它应该可以工作:)
注意:PARSE
功能在SQL Server 2012及更高版本中可用。