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

时间:2019-03-11 20:12:48

标签: sql-server date converters

我有以下问题。 我有一些日期格式为'15122019'的日期,我需要此格式为2019-12-15,我已经用以下方式解决了。

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

真正的问题是,当日期类似于“ 3122019”时,由于长度较短,无法进行转换。还有另一种方法吗?我已经尝试解决了几个小时。还有一个问题,可以将该查询参数化吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

这对于单位(和两位数)的天数可以很好地工作,但是,确实需要两位数的月份

答案 2 :(得分:0)

您可以在左侧添加myProc,并用CREATE PROCEDURE parseJSON @DebriefName NVARCHAR(255), @Version INT AS EXEC myProc @DebriefName, @Version; //Need to capture the result data in a temp table or something // Parse the JSON data for each question item in temp table GO; 取8个字符。像0。它适用于15122018和3122018

right