我正在尝试在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)
错误
“从字符串转换日期和/或时间时转换失败”
我在做什么错了?
答案 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