CAST 数字为 varchar,然后更新为另一个 table 作为日期
CAST number as varchar, then update into another table as date
我会尽可能简短,但首先要说我是网络专家,而不是 DBA。
SQL 服务器企业版 11.0.5343
场景 - 需要同时获取三列(每列都有日期的一部分),然后用完整日期更新另一个 table。
来源table:UT210AP
Columns:
UTONMM (Utility On Month - 2 digit)
UTONDD (Utility On Day - 2 digit)
UTONYY (Utility On Year - 2 digit)
UTONCV (Utility On Century - 0 = 19xx, 1 = 20xx)
我可以 select 使用此代码将数据 "date" (源数据位于 IBM AS/400 链接服务器上)
CAST(UTONMM as varchar) + '/' +
CAST(UTONDD as varchar) + '/' +
CASE WHEN UTONCV = '1'
THEN
RIGHT('20' + CONVERT(varchar(4), RIGHT('00' + CONVERT(varchar(4),UTONYY),2)),4)
ELSE
RIGHT('19' + CONVERT(varchar(4), UTONYY),4)
END AS UTON
我在命名为 "UTON":
的列中得到了这些结果
4/6/1994
7/1/1988
11/14/1990
6/6/2014
问题:
我有一个每晚运行的导入作业,我需要将 "date"(如 4/6/1994)作为作业更新语句的一部分放入名为 TIME_CONNECT 的字段中:
Update [responder].[Temp_RX_CUSTOMERS]
set CustomerID = lf.UTCSID
from [responder].[Temp_RX_CUSTOMERS] LEFT Outer Join
[HTEDTA].[THOR].[HTEDTA].UT210AP lf ON [responder].[Temp_RX_CUSTOMERS].LocationID = lf.UTLCID
where lf.UTOFMM = 0
上面代码中的"UTOFMM"是"Utility Off Month",我什至不关心检查它的值,我只想从顶部获取"UTON"日期select 语句到 "TIME_CONNECT" 字段中的 "Temp_RX_CUSTOMERS" 字段。
这是你想要的吗?这会将值复制到字段中,假设 time_connect
是一个字符串。
Update [responder].[Temp_RX_CUSTOMERS]
set CustomerID = lf.UTCSID,
time_connect = (CAST(UTONMM as varchar) + '/' +
CAST(UTONDD as varchar) + '/' +
(CASE WHEN UTONCV = '1'
THEN RIGHT('20' + CONVERT(varchar(4), RIGHT('00' + CONVERT(varchar(4),UTONYY),2)),4)
ELSE RIGHT('19' + CONVERT(varchar(4), UTONYY),4)
END)
)
from [responder].[Temp_RX_CUSTOMERS] LEFT Outer Join
[HTEDTA].[THOR].[HTEDTA].UT210AP lf
ON [responder].[Temp_RX_CUSTOMERS].LocationID = lf.UTLCID
where lf.UTOFMM = 0;
如果time_connect
是date/datetime数据类型,您可以使用datefromparts()
(在SQL Server 2012+中可用):
Update [responder].[Temp_RX_CUSTOMERS]
set CustomerID = lf.UTCSID,
time_connect = DATEFROMPARTS(1800 + UTONCV * 100 + UNONYY,
UTONMM, UTONDD)
from [responder].[Temp_RX_CUSTOMERS] LEFT Outer Join
[HTEDTA].[THOR].[HTEDTA].UT210AP lf
ON [responder].[Temp_RX_CUSTOMERS].LocationID = lf.UTLCID
where lf.UTOFMM = 0;
我会尽可能简短,但首先要说我是网络专家,而不是 DBA。
SQL 服务器企业版 11.0.5343
场景 - 需要同时获取三列(每列都有日期的一部分),然后用完整日期更新另一个 table。
来源table:UT210AP
Columns:
UTONMM (Utility On Month - 2 digit)
UTONDD (Utility On Day - 2 digit)
UTONYY (Utility On Year - 2 digit)
UTONCV (Utility On Century - 0 = 19xx, 1 = 20xx)
我可以 select 使用此代码将数据 "date" (源数据位于 IBM AS/400 链接服务器上)
CAST(UTONMM as varchar) + '/' +
CAST(UTONDD as varchar) + '/' +
CASE WHEN UTONCV = '1'
THEN
RIGHT('20' + CONVERT(varchar(4), RIGHT('00' + CONVERT(varchar(4),UTONYY),2)),4)
ELSE
RIGHT('19' + CONVERT(varchar(4), UTONYY),4)
END AS UTON
我在命名为 "UTON":
的列中得到了这些结果4/6/1994
7/1/1988
11/14/1990
6/6/2014
问题: 我有一个每晚运行的导入作业,我需要将 "date"(如 4/6/1994)作为作业更新语句的一部分放入名为 TIME_CONNECT 的字段中:
Update [responder].[Temp_RX_CUSTOMERS]
set CustomerID = lf.UTCSID
from [responder].[Temp_RX_CUSTOMERS] LEFT Outer Join
[HTEDTA].[THOR].[HTEDTA].UT210AP lf ON [responder].[Temp_RX_CUSTOMERS].LocationID = lf.UTLCID
where lf.UTOFMM = 0
上面代码中的"UTOFMM"是"Utility Off Month",我什至不关心检查它的值,我只想从顶部获取"UTON"日期select 语句到 "TIME_CONNECT" 字段中的 "Temp_RX_CUSTOMERS" 字段。
这是你想要的吗?这会将值复制到字段中,假设 time_connect
是一个字符串。
Update [responder].[Temp_RX_CUSTOMERS]
set CustomerID = lf.UTCSID,
time_connect = (CAST(UTONMM as varchar) + '/' +
CAST(UTONDD as varchar) + '/' +
(CASE WHEN UTONCV = '1'
THEN RIGHT('20' + CONVERT(varchar(4), RIGHT('00' + CONVERT(varchar(4),UTONYY),2)),4)
ELSE RIGHT('19' + CONVERT(varchar(4), UTONYY),4)
END)
)
from [responder].[Temp_RX_CUSTOMERS] LEFT Outer Join
[HTEDTA].[THOR].[HTEDTA].UT210AP lf
ON [responder].[Temp_RX_CUSTOMERS].LocationID = lf.UTLCID
where lf.UTOFMM = 0;
如果time_connect
是date/datetime数据类型,您可以使用datefromparts()
(在SQL Server 2012+中可用):
Update [responder].[Temp_RX_CUSTOMERS]
set CustomerID = lf.UTCSID,
time_connect = DATEFROMPARTS(1800 + UTONCV * 100 + UNONYY,
UTONMM, UTONDD)
from [responder].[Temp_RX_CUSTOMERS] LEFT Outer Join
[HTEDTA].[THOR].[HTEDTA].UT210AP lf
ON [responder].[Temp_RX_CUSTOMERS].LocationID = lf.UTLCID
where lf.UTOFMM = 0;