2017-05-05 134 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

相关问题