转换datetime字段时转换失败

时间:2018-01-29 11:36:34

标签: sql sql-server date

我正在尝试将日期字段显示为只是' Jan'所以一个3个字母的缩写。

我正在尝试

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

但是当我从字符串中转换日期和/或时间时,转换失败'

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

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

由于

4 个答案:

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