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)