SQL转换日期dmmyyyy和ddmmyy到yyyy-mm-dd

问题描述 投票:2回答:3

我有以下问题。我有一些日期与以下格式'15122019',我需要这种格式2019-12-15,我已经通过以下方式解决了它。

select convert (date, Stuff(Stuff('15122018',5,0,'.'),3,0,'.'),104)

真正的问题是,当日期如此'3122019'时,由于长度较短,无法进行转换。还有另一种方法吗?我一直试图解决它几个小时。另一个问题,这个查询可以参数化吗?

sql-server date converters
3个回答
3
投票

试试这个:

 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
投票

您可以在左侧添加0,并使用right获取8个字符。像RIGHT('0'+'15122018',8)。它适用于15122018和3122018

select convert (date, Stuff(Stuff( RIGHT('0'+'15122018',8) ,5,0,'.'),3,0,'.'),104)

0
投票

这种对话可以通过以下方式实现

  • 使用中间FORMAT转换将整数值转换为DATE,以转换为可识别的会话字符串模式。 样式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

这将适用于单个(和双)数字日数,但是,它确实需要两位数的月份

© www.soinside.com 2019 - 2024. All rights reserved.