我有一个 varchar 列的格式为ddmmyyyy,我正在尝试将其转换为dd mm yyyy格式的日期。我正在使用下面的查询,但出现错误:从字符串转换日期和/或时间时转换失败。
varchar
select *, coalesce(try_convert(date, newdate, 105), convert(date, newdate)) from mydate
bqucvtff1#
你没有约会,你有一个字符串。因此,可以使用字符串操作:
select stuff(stuff(newdate, 5, 0, '-'), 3, 0, '-')
如果要转换为日期,可以执行以下操作:
select convert(date, concat(right(newdate, 4), substring(newdate, 3, 2), left(newdate, 2)))
然后可以根据需要格式化它。但是,不应将值转换为日期。你首先应该把它存储为一个日期。
pn9klfpd2#
把你的字符串变成日期,你可以 [try_]cast() 信息技术;sql server通常具有足够的灵活性,可以自行确定格式:
[try_]cast()
try_cast(newdate as date)
如果要将其转换回目标格式的字符串,则可以使用 format() :
format()
format(try_cast(newdate as date), 'dd-MM-yyyy')
与纯字符串操作相比 try_cast() / format() 方法是验证字符串是否是流程中的有效日期。
try_cast()
tjvv9vkg3#
必须同意其他人的意见。为什么要首先将日期存储为字符串?以非标准格式,不少于?这里有一种方法,但您确实应该修复数据模型。将日期存储为日期。
DECLARE @badIdea table (dt char(8)); INSERT @badIdea(dt) VALUES('21052020'); SELECT newdate = TRY_CONVERT(date, RIGHT(dt,4) + SUBSTRING(dt,3,2) + LEFT(dt,2)) FROM @badIdea;
BTW105不起作用,因为它需要破折号。这样做有效:
SELECT CONVERT(date, '21-05-2020', 105);
这格式也不好,伊莫,因为谁知道 07-08-2020 七月八日或八月七日。但至少sql server支持这一点。你现在的选择不是。
07-08-2020
bjg7j2ky4#
sql不以不同的格式存储日期数据类型,尝试并调整它可能不是一个好主意。但是,如果您希望结果集只是以不同的格式显示日期,那么您的做法是正确的。您只需要将日期数据类型转换为字符串。
SELECT * , COALESCE ( TRY_CONVERT ( CHAR(10), newdate, 105 ), CONVERT ( CHAR(10), newdate ) ) FROM mydate
4条答案
按热度按时间bqucvtff1#
你没有约会,你有一个字符串。因此,可以使用字符串操作:
如果要转换为日期,可以执行以下操作:
然后可以根据需要格式化它。
但是,不应将值转换为日期。你首先应该把它存储为一个日期。
pn9klfpd2#
把你的字符串变成日期,你可以
[try_]cast()
信息技术;sql server通常具有足够的灵活性,可以自行确定格式:如果要将其转换回目标格式的字符串,则可以使用
format()
:与纯字符串操作相比
try_cast()
/format()
方法是验证字符串是否是流程中的有效日期。tjvv9vkg3#
必须同意其他人的意见。为什么要首先将日期存储为字符串?以非标准格式,不少于?这里有一种方法,但您确实应该修复数据模型。将日期存储为日期。
BTW105不起作用,因为它需要破折号。这样做有效:
这格式也不好,伊莫,因为谁知道
07-08-2020
七月八日或八月七日。但至少sql server支持这一点。你现在的选择不是。bjg7j2ky4#
sql不以不同的格式存储日期数据类型,尝试并调整它可能不是一个好主意。
但是,如果您希望结果集只是以不同的格式显示日期,那么您的做法是正确的。您只需要将日期数据类型转换为字符串。