我有一个varchar(7)列的数据,我想要将其转换为DateTime列.

我有一个 Select ,我将其分为月、年,并将日期设置为1.我很难将这些数据插入到LogDate [datetime]中.我试图连接SELECT,但得到的语法不正确.有没有其他方法可以做到这一点?

工作台设置

CREATE TABLE LogData
(
    LogMonth [varchar](7) NOT NULL,
    LogDate [datetime] NULL
);

INSERT INTO LogData ([LogMonth])
VALUES ('01/2023');

INSERT INTO LogData ([LogMonth])
VALUES ('02/2023');

INSERT INTO LogData ([LogMonth])
VALUES ('03/2023');

插入

SELECT 
    REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 1)) AS [Month],
    REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 2)) AS [Year],
    [Day] = 1
FROM 
    LogData

这就是我try 过的:

INSERT INTO LogData (LogDate)
    SELECT 
        CONCAT(REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 1)) AS [Month],
               REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 2)) AS [Year],
               [Day] = 1) 

样本

http://sqlfiddle.com/#!18/16bbc/1

推荐答案

您实际上会想要根据您所拥有的信息构建一个日期.做到这一点的一种方法是DATEFROMPARTS.它使用年、月和日,并将其转换为日期.

SELECT 
  DATEFROMPARTS(RIGHT(LogMonth, 4), LEFT(LogMonth, 2), 1)
FROM LogData

在您的sqlfiddle示例中,您必须使用UPDATE而不是INSERT,因为您已经创建了一些数据:

UPDATE LogData 
   SET LogDate = DATEFROMPARTS(RIGHT(LogMonth, 4), LEFT(LogMonth, 2), 1);

看一看:sqlfiddle

Sql相关问答推荐

SQL:创建查询以添加减少的总数

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

为什么postgres中CURRENT_TIMESTAMP的日期与CURRENT_DATE不同?

我可以将INSERT语句与SELECT一起使用来创建条件吗?

连接三个表的正确方式是什么?在这三个表中,可以显示在一个表上的行将在其他表中显示结果

如何嵌套两条SQL语句

Oracle 23c ROUND,数据类型为DATE

如何在AWS Athena中 Select JSON数组的最后一个元素?

从选定记录中提取摘要作为值的划分

从输出中删除 jsonb_build_object

计算不同模式的时间跨度

SQL 语句将一列中的值与另一列中的不同值相加,同时按第三列进行分组?

如何根据 SQL Server 中 1 条语句中 SELECT 的结果进行 INSERT 或 UPDATE

PostgreSQL - 递归地聚合来自不同列的属性

PostgreSQL - 从同一张表中获取值

函数调用作为插入值语句中的参数

postgres按组消除分区中的NULLS

存储过程 - 动态 SQL 中不同列值的计数

奇怪的甲骨文行为

pyspark 将列转换为行