我试图将日期字段显示为'Jan',因此是3个字母的缩写。
我在尝试
try_convert(char(3),Datename(Month,[Date]))
但我得到'从字符串转换日期和/或时间时转换失败'
我理解这是因为日期存储为varchar但显示为dd-mm-yyyy 12:53:34:300。
无论如何我可以显示日期的月份缩写,而不会将日期字段从varchar更改为日期。
谢谢
这里更好的问题是为什么你把日期存储为varchar
。别。你不应该有很多理由,我真的不知道为什么你应该这么做的好。
作为一个简单的例子,“日期”'31-01-2000'
是在'09-12-2017'
条款的日期varchar
之后。因此,使用WHERE [varcharDateColumn] <= '09-12-2017'
的查询将不会返回上述第一天的项目。因此,您必须使用CONVERT
/ CAST
,这意味着您不能使用任何索引。
对于你所拥有的,正确的代码将(可能)是:
LEFT(DATENAME(MONTH,TRY_CONVERT(date,[Date])),3)
但是,我强烈建议您修复数据类型,然后不需要使用TRY_CONVERT
。
您的查询稍有变化可以帮助您。试试这个
SELECT CONVERT(char(3),Datename(Month,CAST([Date] AS VARCHAR(20))))
您使用的是SQL Server 2012+ ..您可以使用FORMAT功能..您的日期列是否具有有效日期..如果您不能使用ISDate()函数来验证它们。
SELECT FORMAT(GETDATE(),'MMM')
OUTPUT
Jan
试试这个:
--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及更高版本中可用。