转换一个新列,然后在 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)