SQL 将日期 dmmyyyy 和 ddmmyy 转换为 yyyy-mm-dd
SQL convert date dmmyyyy and ddmmyy to yyyy-mm-dd
我有以下问题。
我有一些格式为“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
这样的对话可以通过以下方式实现:
- 使用中间 FORMAT 转换将整数值转换为可识别的对话字符串模式。
- 应用样式 105 以将输入匹配为
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
这将适用于一位(和两位)数字的日期,但是,它确实需要两位数的月份
你可以在左边加0
,用right
取8个字符。喜欢 RIGHT('0'+'15122018',8)
。它适用于 15122018 和 3122018
select convert (date, Stuff(Stuff( RIGHT('0'+'15122018',8) ,5,0,'.'),3,0,'.'),104)
我有以下问题。 我有一些格式为“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
这样的对话可以通过以下方式实现:
- 使用中间 FORMAT 转换将整数值转换为可识别的对话字符串模式。
- 应用样式 105 以将输入匹配为
dd-mm-yyyy
- 样式 05 匹配
dd-mm-yy
- 应用样式 105 以将输入匹配为
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
这将适用于一位(和两位)数字的日期,但是,它确实需要两位数的月份
你可以在左边加0
,用right
取8个字符。喜欢 RIGHT('0'+'15122018',8)
。它适用于 15122018 和 3122018
select convert (date, Stuff(Stuff( RIGHT('0'+'15122018',8) ,5,0,'.'),3,0,'.'),104)