我有以下问题。我有一些日期与以下格式'15122019',我需要这种格式2019-12-15,我已经通过以下方式解决了它。
select convert (date, Stuff(Stuff('15122018',5,0,'.'),3,0,'.'),104)
真正的问题是,当日期如此'3122019'时,由于长度较短,无法进行转换。还有另一种方法吗?我一直试图解决它几个小时。另一个问题,这个查询可以参数化吗?
试试这个:
DECLARE @date VARCHAR(20)
SET @date ='3122019'
IF(LEN(@date) = 8)
BEGIN
SET @date = Stuff(Stuff(@date,5,0,'.'),3,0,'.');
SELECT CONVERT(DATE, @date , 103);
END
ELSE IF(LEN(@date) = 7)
BEGIN
SET @date = Stuff(Stuff(@date,4,0,'.'),2,0,'.');
IF(ISDATE(@date)=1)
BEGIN
SELECT CONVERT(DATE, @date , 103);
END
ELSE
BEGIN
SET @date = Stuff(Stuff(@date,4,0,'.'),3,0,'.');
SELECT CONVERT(DATE, @date , 103);
END
END
ELSE IF(LEN(@date) = 6)
BEGIN
SET @date = Stuff(Stuff(@date,3,0,'.'),2,0,'.');
SELECT CONVERT(DATE, @date , 103);
END
您可以在左侧添加0
,并使用right
获取8个字符。像RIGHT('0'+'15122018',8)
。它适用于15122018和3122018
select convert (date, Stuff(Stuff( RIGHT('0'+'15122018',8) ,5,0,'.'),3,0,'.'),104)
这种对话可以通过以下方式实现
dd-mm-yyyy
风格05匹配dd-mm-yy
SQL:
-- input format: dmmyyyy
SELECT CONVERT(DATE, FORMAT(3012019, '##-##-####'), 105)
-- result: 2019-01-03
-- input format: dmmyy
SELECT CONVERT(DATE, FORMAT(30119, '##-##-##'), 05)
-- result: 2019-01-03
这将适用于单个(和双)数字日数,但是,它确实需要两位数的月份