我有一列中的数据varchar(7),我想将其转换为一DateTime列。
我有一个选择,将其分为月、年并将日期设置为 1。我很难将此数据插入到LogDate [datetime]. 我尝试 CONCAT 选择,但我得到了 Interpretation Syntax 。还有其他方法可以做到这一点吗?
桌子设置
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');
Run Code Online (Sandbox Code Playgroud)
插入
SELECT
REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 1)) AS [Month],
REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 2)) AS [Year],
[Day] = 1
FROM
LogData
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
INSERT INTO LogData (LogDate)
SELECT
CONCAT(REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 1)) AS [Month],
REVERSE(PARSENAME(REPLACE(REVERSE(LogMonth), '/', '.'), 2)) AS [Year],
[Day] = 1)
Run Code Online (Sandbox Code Playgroud)
样本
您实际上需要根据您拥有的信息构建一个日期。一种方法是执行此操作DATEFROMPARTS。它需要年、月和日并将其转换为日期。
SELECT
DATEFROMPARTS(RIGHT(LogMonth, 4), LEFT(LogMonth, 2), 1)
FROM LogData
Run Code Online (Sandbox Code Playgroud)
在您的 sqlfiddle 示例中,您必须使用UPDATE代替INSERT,因为您已经创建了一些数据:
UPDATE LogData
SET LogDate = DATEFROMPARTS(RIGHT(LogMonth, 4), LEFT(LogMonth, 2), 1);
Run Code Online (Sandbox Code Playgroud)
看看:sqlfiddle
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |