2016-09-27 55 views
0

我在SQL Server梟雄Studio的2014年工作從columnconcat從三個表+ lpad裏面獲取最小值。 MS SQL

在我的工作,我有三個表,每個包含2列,一個日期時間加上準確的日期(但時間包含)項目和另一個 - 包含時間的smallint(8:55是855的值,而14:45是1445)。

我想要做的是從所有這三個表中的這兩列合併得到最小值。

我有什麼弄明白由我自己到現在爲止是:

  1. 使用lpad("U_StartTime", 0, '4')來填補像855的值到0855(用於精確比較)。然而lpad在我的工作室無法識別。

    lpad無法識別內置函數

  2. 然後我可以合併這樣既列:

    SELECT concat("U_StartDate", ' ', "U_StartTime") FROM "TABLE1". 
    

    這是確定的,直到我嘗試用lpad做到這一點。

  3. 然後我可以採取所有值考慮這樣的:

    SELECT concat("U_StartDate", ' ', "U_StartTime") FROM "TABLE1" 
    UNION 
    SELECT concat("U_StartDate", ' ', "U_StartTime") FROM "TABLE2" 
    ... 
    
  4. 而且我可以採取MIN(column),但我不知道如何從整體UNION SELECT的(這三個表)得到MIN

非常感謝您對我當前的sql問題提出的任何建議。

編輯 - 圖像NIKHIL: enter image description here

編輯: 我已經改變了一點。現在我正在修改日期時間對象,而不是處理字符串比較。至於有人一個例子,我貼的代碼的一部分:

select DATEADD(minute, "U_StartTime"%100, DATEADD(hour, "U_StartTime"/100, "U_StartDate")) from "TABLE1" 

而不是

select MIN(concat("U_StartDate", ' ', RIGHT('0000' + "U_StartTime", '4'))) from "TABLE1" 
+0

請舉例說明,而不是文字並表現出一定的輸入和預期的輸出 – TheGameiswar

+0

,除非你想查詢運行在這兩種 – TheGameiswar

回答

1

可能是你可以試試這個

select data from ( select concat("U_StartDate", ' ', "U_StartTime")as 'data' from "TABLE1" UNION select concat("U_StartDate", ' ', "U_StartTime")as 'data' from "TABLE2" ... ) where data is not null order by data asc LIMIT 1;

+0

感謝您的回答也標記是SQL/MySQL的。這是很好的方式,但external()之外的數據不是可識別的列。 –

+0

但是我們可以從上述查詢中獲得最小的行值 –

+0

我已經上傳了包含您的建議的問題圖片。我的意思是這是一個很好的提示,但是在我的代碼中應該只是語法錯誤或者提出的答案。 在編輯中我還提到我改變了字符串的方式,並且我正在修改我有的datetime列。 感謝NikHil爲您的時間。 –

1

可以使用RIGHT代替lpad

SELECT RIGHT('0000' + '855', 4) -- 0855 
SELECT RIGHT('0000' + '1445', 4) -- 1445 

查詢看起來像

SELECT MIN(RIGHT('0000' + YourColumn, 4) * 1) 
FROM 
    Tbl