我需要将数据从A列插入到B 列。
A 列示例值:
CustomerDB_2016_12_12_203001_9284029
CustomerDB_2016-12_11_203005_8572784
CustomerDB_2016-12_10_203353_5347358
Run Code Online (Sandbox Code Playgroud)
等等
B栏为空
我需要B 列来存储如下值(来自A 列)
2016-12-12
2016-12-11
2016-12-10
Run Code Online (Sandbox Code Playgroud)
等等
这在 SQL Server 中可能吗?
谢谢。
一个更新查询可以这样做:
UPDATE
YourTableName
SET
ColumnB = CAST(REPLACE(SUBSTRING(ColumnA, 12, 10), '_', '-') AS DATE)
;
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用计算列。
DECLARE @Sample TABLE
(
ColumnA VARCHAR(255),
ColumnB AS CAST(REPLACE(SUBSTRING(ColumnA, 12, 10), '_', '-') AS DATE)
)
;
INSERT INTO @Sample
(
ColumnA
)
VALUES
('CustomerDB_2016_12_12_203001_9284029'),
('CustomerDB_2016-12_11_203005_8572784'),
('CustomerDB_2016-12_10_203353_5347358')
;
Run Code Online (Sandbox Code Playgroud)
两种方法都返回:
ColumnA ColumnB
CustomerDB_2016_12_12_203001_9284029 2016-12-12
CustomerDB_2016-12_11_203005_8572784 2016-12-11
CustomerDB_2016-12_10_203353_5347358 2016-12-10
Run Code Online (Sandbox Code Playgroud)
如果您想保持两列同步,我建议使用计算列。否则继续更新。
我使用cast显式设置返回的数据类型。
我已经使用替换来重新格式化日期。YYYY-MM_DD 变为 YYYY-MM-DD。第二种格式可以直接从字符串转换为日期。第一个不能。
我使用substring从位置 12 开始提取 10 个字符。
编辑
试图从另一个值中提取一个值通常非常棘手。在这种情况下,有几种不同的格式需要处理。
此更新查询使用一系列替换函数从 ColumnA 中删除 CustomerDb、备份、下划线和破折号。剩下的应该是一个以 YYYYMMDD 开头的字符串。该值被提取并转换为日期。
-- Each replace strips away unrequired characters,
-- leaving us with a string in the format YYYYMMDD.
UPDATE
@Sample
SET
ColumnB = CAST(LEFT(REPLACE(REPLACE(REPLACE(REPLACE(ColumnA, 'CustomerDB', ''), '_', ''), '-', ''), 'BACKUP', ''), 8) AS DATE)
;
Run Code Online (Sandbox Code Playgroud)
这个问题有更好的方法。但是,此解决方案更易于编辑和扩展。
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |