【发布时间】:2017-08-27 12:39:29
【问题描述】:
我正在尝试计算合同的 AGE,但出现错误
不允许从数据类型 date 到 int 的显式转换
这是我的代码:
SELECT
Contract_hist.*,
IB.*,
CAST((CASE
WHEN (CAST(CONVERT(INT, Setup.[Start]) - CONVERT(INT,[IB].[Install_Date])) AS INT))/365 <= 0
THEN 0
WHEN (CAST(CONVERT(INT, Setup.[Start]) - CONVERT(INT,[IB].[Install_Date])) AS INT)) / 365 > 0
THEN (CAST(CONVERT(INT, Setup.[Start]) CONVERT(INT,[IB].[Install_Date])) AS INT)) / 365
END) AS INT) AS AGE
FROM
Setup, Contract_hist
INNER JOIN
IB ON Contract_hist.[System No] = IB.System_ID
其中 "Setup.[Start]" & "[IB].[Install_Date]" 是 datetime2 值。
【问题讨论】:
-
这有关系吗? stackoverflow.com/questions/5505935/…“在最新版本的 sql server 中,转换为 int 不再有效”。尝试使用
DATEDIFF(dd, '12/30/1899', mydatefield)。 -
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 年前),不鼓励使用。你应该绝对不混合这两种风格! -
那么,你有什么建议?我应该使用哪种
join?
标签: sql-server datetime sql-server-2012 type-conversion