2017-05-05 90 views
-2

我有如下表,如果日期爲null,然後我想要得到的WorkType如何檢查在SQL特定字段是否具有值或沒有

enter image description here

Empid Role WorkType1 DATE1  WorkType2 DATE2  WorkType3 DATE3 
8  P001 Work1  NULL  Work2  NULL  Work3  NULL 
9  P002 Work2  12/9/2016 Work6  NULL  Work3  NULL 
2  P003 Work3  NULL  Work6  12/9/2016 Work2  2/9/2016 
7  P004 Work4  NULL  Work6  12/9/2016 Work5  NULL 
1  P005 Work5  12/9/2016 Work4  NULL  Work3  NULL 
2  P006 Work6  NULL  Work1  12/9/2016 Work5  NULL 
+0

它返回空值或空白? – McNets

+1

只需使用'IS NULL'或'IS NOT NULL'。如果一個字段包含一個空字符串,它*會*有一個值。如果你想檢查空或空字符串,使用'myField爲空或myfield =''' –

+0

'null'在SQL中意味着'未知'。你可以給空或空白不管這意味着你要 –

回答

1

Easiet但不是最好的解決方案是簡單地計算每列中的空值,然後你可以使用這個子查詢並計算總和。

select sum(case when work1_date is null then 1 else 0 end) as count_nulls_workdate1, 
      sum(case when work2_date is null then 1 else 0 end) as count_nulls_workdate2, 
      sum(case when work3_date is null then 1 else 0 end) as count_nulls_workdate3 
     from empno; 
+0

我有如下表,如果日期爲null,然後我想要得到的WorkType ID \t僱工\t角色\t WorkType1 \t DATE1 \t WorkType2 \t DATE2 \t WorkType3 \t DATE3 \t \t WorkType4 DATE4 \t P001 R1 \t \t工作1 NULL \t \t WORK2 NULL \t \t Work3 NULL \t \t Work4 NULL P002 \t \t R2 WORK2 \t 2016年12月9日10時05分\t \t Work6 NULL \t \t Work3 NULL \t \t工作1 10:05 2016年12月9日 \t P003 R3 \t \t Work3 NULL \t \t Work6 12/9/2016 10:05 \t \t WORK2 10:05 2016年12月9日\t \t Work5 NULL \t P004 R6 \t \t Work4 NULL \t \t Work6 10:05 2016年12月9日\t Work5 \t \t NULL工作1 \t 2016年12月9日10時05分 \t P005 R2 \t \t Work5 10:05 2016年12月9日\t \t Work4 NULL \t \t Work3 NULL \t \t WORK2 NULL \t P006 R1 \t Work6 \t NULL \t工作1 \t 2016年12月9日10:05 \t Work5 \t NULL \t Work3 \t NULL –

+0

您應該修改您原來的問題或發佈它作爲一個新的問題。評論對於發佈像這樣的數據塊來說並不好。 –

+0

我有一個表如下,如果日期爲空,那麼我想要獲得WorkType Empid角色WorkType1 DATE1 WorkType2 DATE2 WorkType3 DATE3 8 P001 Work1 NULL Work2 NULL Work3 NULL \t 9 P002 Work2 12/9/2016 Work6 NULL NULL Work3 2 P003 Work3 NULL Work6 2016年12月9日2016年12月9日WORK2 7 P004 Work4 \t \t NULL Work6 \t 2016年12月9日Work5 \t \t NULL 1 P005 Work5 2016年12月9日Work4 NULL Work3 NULL P006 Work6 NULL Work1 12/9/2016 Work5 \t NULL –

0

試試這個:

select count(*)-count(work1_date) as count_nulls_workdate1, 
     count(*)-count(work2_date) as count_nulls_workdate2, 
     count(*)-count(work3_date) as count_nulls_workdate3 
     from Table; 

算不算空值,那麼COUNT(*),其計算記錄 - 計數(場)=零點

0

下面的答案是計數我對你的要求的解釋,你的問題有點不清楚。

SELECT 
ID, 
EMPLOYEE, 
[ROLE], 
WorkType1, 
    CASE WHEN Date1 IS NULL THEN WorkType1 ELSE CAST(Date1 AS VARCHAR(23)) END Date1, 
WorkType2, 
    CASE WHEN Date2 IS NULL THEN WorkType2 ELSE CAST(Date2 AS VARCHAR(23)) END Date2, 
WorkType3, 
    CASE WHEN Date3 IS NULL THEN WorkType3 ELSE CAST(Date3 AS VARCHAR(23)) END Date3 
WorkType4, 
    CASE WHEN Date4 IS NULL THEN WorkType4 ELSE CAST(Date4 AS VARCHAR(23)) END Date4 

日期的顯式轉換爲VARCHAR(23)當你用日期值這是不兼容的數據類型我選擇VARCHAR(23)混合Worktype允許日期時間

根據需要在您的數據庫設置中,您可能需要額外拆分日期以在輸出中保留您期望的格式,下面給出了yyyy-MM-dd HH:mm:ss。

CAST(Datepart(Year,Date1) AS VARCHAR(4)) + '-'+ RIGHT('00'+CAST(Datepart(Month,Date1) AS VARCHAR(2)),2) + '-' + RIGHT('00' + CAST(Datepart(Day,Date1) AS VARCHAR(2)),2) + ' ' + RIGHT('00' + CAST(Datepart(HH,Date1) AS VARCHAR(2)),2)+ ':' + RIGHT('00'+CAST(Datepart(MINUTE,Date1) AS VARCHAR(2)),2) + ':' + RIGHT('00'+CAST(Datepart(ss,Date) AS VARCHAR(2)),2) 

我用下面的測試

DECLARE @Date1 DATEtime = '2017-01-01', @Date2 DATEtime = NULL, @Date3 Datetime = '2017-01-02' 
,@Worktype1 Varchar(20) = 'Test1' 
,@Worktype2 Varchar(20) = 'Test2' 
,@Worktype3 Varchar(20) = 'Test3' 

SELECT 
    CASE WHEN @Date1 IS NULL THEN @WorkType1 ELSE CAST(@Date1 AS VARCHAR(25)) END Date1, /*Varchar 23 date*/ 
    CASE WHEN @Date2 IS NULL THEN @WorkType2 ELSE CAST(@Date2 AS VARCHAR(25)) END Date2, /* Result of Worktype2 due to null */ 
    CASE WHEN @Date3 IS NULL THEN @WorkType3 ELSE CAST(Datepart(Year,@Date3) AS VARCHAR(4)) + '-'+ RIGHT('00'+CAST(Datepart(Month,@Date3) AS VARCHAR(2)),2) + '-' + RIGHT('00' + CAST(Datepart(Day,@Date3) AS VARCHAR(2)),2) + ' ' + RIGHT('00' + CAST(Datepart(HH,@Date3) AS VARCHAR(2)),2)+ ':' + RIGHT('00'+CAST(Datepart(MINUTE,@Date3) AS VARCHAR(2)),2) + ':' + RIGHT('00'+CAST(Datepart(ss,@Date3) AS VARCHAR(2)),2) END Date3 /* Result for Date 3 formatted to yyyy-MM-dd HH:mm:ss*/ 

其提供了以下的結果集

[結果集] [1]:https://i.stack.imgur.com/Y1uUp.jpg

相關問題