转换一个新列,然后在 where 语句中与另一个 table 交叉比较
Cast a new column and then cross compare to another table in where statement
我目前在 sql 服务器管理工作室工作。我有 2 tables。第一个table有2列,col1是一个smalldatetime,col2也是一个smalldatetime。第二个 table 有 3 列,一个 varchar(25) 列,一个位列和一个 smalldatetime 列。
我的问题是:对于 table 1,我在第二个 table 中使用 smalldatetime 创建 varchar 字符串。我需要一种方法来将 smalldatetime 创建的数字与 table 中的 varchar 进行交叉比较 2. 我的代码如下:
SELECT Distinct
RIGHT('0' + CAST(DATEPART(M, table1.col1) AS varchar), 2)
+ RIGHT ('0' + Cast(DATEPART(DD, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(HH, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(MINUTE, table1.col1) AS varchar), 2) AS 'CreatedNumber', table1.col2
FROM table1 WHERE table1.col2 IS NULL
AND [CreatedNumber] NOT IN (SELECT table2.col1 FROM table2)
我的错误出现在您看到“[CreatedNumber]”的最后一行。问题是这不是列名,所以我不能使用我的 creatednumber 列在 where 子句中执行任何类型的功能。我是否需要使用转换函数或创建一个 table 来执行此操作?
你可以这样做:
SELECT DISTINCT
tbl.CreatedNumber,
tbl.col2
FROM
(
SELECT
RIGHT('0' + CAST(DATEPART(M, table1.col1) AS varchar), 2)
+ RIGHT ('0' + Cast(DATEPART(DD, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(HH, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(MINUTE, table1.col1) AS varchar), 2) AS 'CreatedNumber',
table1.col2
FROM
table1
) AS tbl
WHERE
tbl.col2 IS NULL
AND tbl.[CreatedNumber] NOT IN (SELECT table2.col1 FROM table2)
我目前在 sql 服务器管理工作室工作。我有 2 tables。第一个table有2列,col1是一个smalldatetime,col2也是一个smalldatetime。第二个 table 有 3 列,一个 varchar(25) 列,一个位列和一个 smalldatetime 列。
我的问题是:对于 table 1,我在第二个 table 中使用 smalldatetime 创建 varchar 字符串。我需要一种方法来将 smalldatetime 创建的数字与 table 中的 varchar 进行交叉比较 2. 我的代码如下:
SELECT Distinct
RIGHT('0' + CAST(DATEPART(M, table1.col1) AS varchar), 2)
+ RIGHT ('0' + Cast(DATEPART(DD, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(HH, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(MINUTE, table1.col1) AS varchar), 2) AS 'CreatedNumber', table1.col2
FROM table1 WHERE table1.col2 IS NULL
AND [CreatedNumber] NOT IN (SELECT table2.col1 FROM table2)
我的错误出现在您看到“[CreatedNumber]”的最后一行。问题是这不是列名,所以我不能使用我的 creatednumber 列在 where 子句中执行任何类型的功能。我是否需要使用转换函数或创建一个 table 来执行此操作?
你可以这样做:
SELECT DISTINCT
tbl.CreatedNumber,
tbl.col2
FROM
(
SELECT
RIGHT('0' + CAST(DATEPART(M, table1.col1) AS varchar), 2)
+ RIGHT ('0' + Cast(DATEPART(DD, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(HH, table1.col1) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(MINUTE, table1.col1) AS varchar), 2) AS 'CreatedNumber',
table1.col2
FROM
table1
) AS tbl
WHERE
tbl.col2 IS NULL
AND tbl.[CreatedNumber] NOT IN (SELECT table2.col1 FROM table2)