转换datetime字段时转换失败

问题描述 投票:-2回答:4

我试图将日期字段显示为'Jan',因此是3个字母的缩写。

我在尝试

try_convert(char(3),Datename(Month,[Date]))

但我得到'从字符串转换日期和/或时间时转换失败'

我理解这是因为日期存储为varchar但显示为dd-mm-yyyy 12:53:34:300。

无论如何我可以显示日期的月份缩写,而不会将日期字段从varchar更改为日期。

谢谢

sql sql-server date
4个回答
2
投票

这里更好的问题是为什么你把日期存储为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


0
投票

您的查询稍有变化可以帮助您。试试这个

SELECT CONVERT(char(3),Datename(Month,CAST([Date] AS VARCHAR(20))))

0
投票

您使用的是SQL Server 2012+ ..您可以使用FORMAT功能..您的日期列是否具有有效日期..如果您不能使用ISDate()函数来验证它们。

SELECT FORMAT(GETDATE(),'MMM')

OUTPUT

Jan

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及更高版本中可用。

© www.soinside.com 2019 - 2024. All rights reserved.