【问题标题】:Convert and Insert varchar date from one table to another将 varchar 日期从一个表转换并插入到另一个表
【发布时间】:2017-08-20 12:42:13
【问题描述】:

我想将日期从一个表插入到另一个表。但问题是,源表将日期存储为 varchar,目标存储为日期数据类型。

我还想在插入到目的地时更改日期的格式。

Table1
Date varchar(80) null

Table2
Date Date null

Table1 中的日期存储在 mm-dd-yyyy 我想把它转换成 dd.mm.yyy 并存储到 Table2 中。

我应该如何转换它? 我在下面尝试过,但它不起作用。

select CONVERT(VARCHAR(10),TRY_Convert(date,[Date]),104)

【问题讨论】:

    标签: sql-server date


    【解决方案1】:

    如果您的目标表具有date 类型的日期字段,您只需将源数据转换为date 类型并插入即可。

    您想要作为输出的dd.mm.yyyy 格式不是date 格式,而是string,并且您始终可以使用convert 从第二个表中获取date 数据,在选择时使用格式104 进行字符串化第二张表中的数据如下:

    declare @Table1 table ([Date] varchar(80) null);
    insert into @Table1 values ('12-31-2001'), ('02-28-2002');
    
    declare @Table2 table ([Date] Date null);
    
    insert into @Table2
    select convert(date, [date], 101)
    from @Table1;
    
    select convert(char(10), [date], 104)
    from @Table2;
    

    这里我使用了表变量,你应该使用你的 Table1、Table2 来代替

    【讨论】:

    • 我同意。您永远不必担心它的存储格式。事实上,您并不关心.. 您应该关心的只是精度 - 日期、日期时间或日期时间 2。然后是你想要检索它的格式。
    • 我希望 MS 在数据库或实例级别提供一个选项来更改默认日期格式。但是他们只在会话级别给出了它(SET DATEFORMAT)如果您的大多数用例都是针对 dd.mm.yyy,您可能想要更改服务器区域设置。替代选项也可以是更改 SQL 实例上的默认语言。
    【解决方案2】:

    假设104是你想要的风格,你只需要一个convert()

    select TRY_CONVERT(VARCHAR(10), [Date], 104)
    

    您的问题令人困惑,因为您指定 source 是一个 varchar,而目标是一个日期。这意味着:

    select TRY_CONVERT(DATE, [Date], 104)
    

    我还将使用varchar“日期”列修复表,以便它使用date 数据类型。这是存储日期的正确方法。如果要将它们存储为字符串(偶尔需要),请使用 YYYY-MM-DD 格式。这是(几乎完全)明确的,很容易变成约会。

    【讨论】:

    • 不,它不工作。无法更改列数据类型,它会影响到现在开发的系统。
    • 如果你不清楚请告诉我你不明白的部分。
    • 你能告诉我如何将 mm-dd-yyyy 转换为 dd.mm.yyyy。就够了
    • @ThesK Gordon(可能)想告诉你什么:如果目标列有某种 real 日期类型,则没有 dd.mm.yyyy 格式。内部存储的值不是字符串,而是二进制值。这如何呈现给您取决于您​​的文化设置...所以:不要为目标格式而烦恼,只要确保您有一个实际日期值.
    • 嗨,戈登,关于您的使用 YYYY-MM-DD 格式。这是(几乎完全)明确的:试试这个:SET LANGUAGE ENGLISH; SELECT CAST('2017-01-02' AS DATETIME); SET LANGUAGE GERMAN; SELECT CAST('2017-01-02' AS DATETIME);。但是如果你把目标类型改成DATE,它就可以正常工作了……奇怪……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多