从字符串转换日期

时间:2019-06-04 16:24:54

标签: tsql sql-server-2008-r2

我正在尝试在SELECT语句中将YYYMMDD的发票日期字段重新排列为短日期格式DD / MM / YYYY或DD-MM-YYYY UK /英国格式。

在MSSQL Server 2008 R2上执行

SQL

CONVERT(date,CAST(columnvalue AS VARCHAR),103)

产生YYYY-MM-DD

CAST(right(convert(varchar,columnvalue),2)+substring(convert(VARCHAR,columnvalue ),5,2) + left(convert(VARCHAR,columnvalue ),4)AS VARCHAR)

产生DDMMYYY

CONVERT(date,CAST(right(convert(varchar,columnvalue),2)+substring(convert(VARCHAR,columnvalue),5,2) + left(convert(VARCHAR,columnvalue),4)AS VARCHAR),103) 

错误

  

“从字符串转换日期和/或时间时转换失败”

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

以下内容会有所帮助:

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [DD/MM/YYYY]

SELECT CONVERT(VARCHAR(10), GETDATE(), 105) AS [DD-MM-YYYY]

答案 1 :(得分:0)

根据要转换的列的数据类型,有不同的解决方法。

假设该列已经是日期类型之一(route / date / datetime),转换就变得很简单-您需要选择正确的{ {1}}参数。

对于英国/法国(datetime2),您使用103:

style

如果源列是字符串列(dd/mm/yyyy / SELECT CONVERT(char(10), dateOrdateTimeValue, 103) / char / varchar),并且日期的字符串表示格式为{{1} },您可以放心地将其强制转换为最新版本,因为nchar将始终被SQL Server正确解释,然后像以前一样使用nvarchar

yyyymmdd

注意:保证正确解释仅ISO8601格式(yyyymmdd | yyyy-mm-dd),而与日期数据类型的文化设置无关(Bewrae:There's a bug in the DateTime data type with the second format)。

如果源列是yyyymmdd,则首先转换为convert,然后转换为SELECT CONVERT(char(10), CAST(stringRepresentationOfDateAsYYYYMMDD As Date), 103) ,最后使用int

char