如何从varchar(max)中的DD / mm / yyyy转换为SQL Server中的yyyymmdd格式

时间:2019-05-12 02:58:48

标签: sql-server

存储在DD/mm/yyyy列中的varchar(max)格式的日期需要转换为yyyymmdd格式。

不支持以下转换/转换选项。

CONVERT(VARCHAR(19), CONVERT(DATETIME, wfm.date, 3), 112) 

CONVERT(VARCHAR(50), CAST(wfm.date AS DATETIME2), 112) 

CAST(CAST(wfm.date AS DATETIME2(15)) AS DATETIME)

我收到有关CONVERT语法的错误消息:

  

从字符串转换日期和/或时间时转换失败。

对于CAST语法,出现此错误:

  

第1行:指定的比例尺15无效。 varchar中的'dd / mm / yyyy /转换为yyyymmdd格式

5 个答案:

答案 0 :(得分:2)

理想情况下,不要将日期存储为varchar,不要将日期存储为date,并担心它们在演示文稿层中显示的格式。因此,您应该这样做:

SELECT TRY_CONVERT(date,YourVarcharMAXDate,103);

如果您必须获取格式yyyyMM`` (i don't recommend, change your data type of your column to日期), then you can use a furterh转换为

SELECT CONVERT(varchar(8),TRY_CONVERT(date,YourVarcharMAXDate,103),112);

如果数据引擎由于格式无效而无法转换日期,则TRY_CONVERT将返回NULL;您需要修正这些值(使它们有效)。另一个不使用varchar存储日期的好理由。

答案 1 :(得分:1)

也许有帮助

    $(document).on("change", ".qty1", function() {
        var arr = [];
        var sum = 0;
        $(".qty1").each(function(){
                arr.push($(this).val());
                sum += +$(this).val();
        });
        $(".total").val(sum);
        $("#min").val(Math.min.apply(Math, arr));
        $("#max").val(Math.max.apply(Math, arr));

   });

答案 2 :(得分:0)

为此您总是可以使用substring。示例如下所示。

DECLARE  @samples TABLE
(
    Dates NVARCHAR(50)
)

INSERT INTO @samples VALUES 
('10/11/2018'),
('12/11/2018'),
('15/11/2018'),
('17/11/2018'),
('19/11/2018'),
('20/11/2018')

SELECT 
        SUBSTRING(Dates, 7,4) + 
        SUBSTRING(Dates, 4,2) + 
        SUBSTRING(Dates, 1,2) as [NewDate]

FROM @samples

输出将是具有所需格式的字符串列表。这不会为您验证,但您始终可以尝试使用CAST将其转换为日期,如果日期正确,则应将yyyyMMdd正确地转换为日期。

答案 3 :(得分:0)

如果您使用的是SQL Server 2016 或更高版本,则可以使用PARSEFORMAT很容易地做到这一点:

SELECT
    FORMAT(PARSE(wfm.Date AS DATE USING 'de-DE'), 'yyyyMMdd')
FROM
    dbo.WhateverYourTableNameIS

dd/mm/yyyy格式是使用的格式,例如在德国,这就是为什么我使用de-DE文化将字符串转换为DATE的原因。然后,您可以使用C#/。NET中常用的格式化字符串对其进行格式化。

答案 4 :(得分:0)

select convert(varchar, convert(datetime, wfm.date, 103), 112)