我尽可能简短,但首先要说我是一个网络人,而不是DBA。
SQL Server Enterprise 11.0.5343
场景 - 需要一起获得三列(每个列都有一部分日期),然后使用完整日期更新另一个表。
来源表: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)
我可以将数据选择为" 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"在上面的代码是"效用关闭月",我甚至不关心检查它的价值,我只是想得到" UTON"从顶部选择语句到#34; TIME_CONNECT" " Temp_RX_CUSTOMERS"中的字段字段。
答案 0 :(得分:1)
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
是日期/日期时间数据类型,则可以使用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;