2015-04-16 13 views
0

我目前正在使用sql server management studio。我有兩張桌子。第一個表有2列,col1是smalldatetime,col2也是smalldatetime。第二個表有3列,一個varchar(25)列,一個位列和一個smalldatetime列。投了一個新的列,然後與其他表中的另一個表進行交叉比較

我的問題是這樣的:對於表1,我使用smalldatetime在第二個表中創建varchar字符串。我需要一種方法來跨越比較SMALLDATETIME產生數目爲VARCHAR表2.我的代碼如下:「[CreatedNumber]」

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列在where子句中執行任何類型的函數。我是否需要使用強制轉換功能或創建表來執行此操作?

回答

1

你可以做這樣的事情:

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) 
+0

這似乎是工作,但我要確保我明白它在做什麼。你是用前13行創建一個表,然後命名爲tbl? – Cheddar

+0

@Cheddar:我使用子查詢獲取數據。原因是你不能直接在where語句中使用別名列。在原始選擇上進行子查詢。我們可以到達concate列並在where語句中使用它。有關更多信息,請參閱子查詢 – Arion

相關問題