Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从此SELECT CASE语句中获取NULL_Postgresql_Case - Fatal编程技术网

Postgresql 从此SELECT CASE语句中获取NULL

Postgresql 从此SELECT CASE语句中获取NULL,postgresql,case,Postgresql,Case,下面有一段代码,根据当天的情况,它应该返回true或false,问题是我得到了一个null。 显然,当我试着输入一个像2017年8月11日(星期三)这样的日期时,我得到了一个预期的假日期。不过,它在其他日子不起作用。 有人知道我为什么得到这个空报税表吗 select (CASE upper(to_char(now()::timestamp without time zone,'Day')) WHEN 'SUNDAY' THEN ('false'::boolean) WHEN 'MOND

下面有一段代码,根据当天的情况,它应该返回true或false,问题是我得到了一个
null
。 显然,当我试着输入一个像2017年8月11日(星期三)这样的日期时,我得到了一个预期的假日期。不过,它在其他日子不起作用。 有人知道我为什么得到这个空报税表吗

select (CASE upper(to_char(now()::timestamp without time zone,'Day')) 
 WHEN 'SUNDAY'
  THEN ('false'::boolean)
 WHEN 'MONDAY'
  THEN ('false'::boolean)
 WHEN 'TUESDAY'
  THEN ('false'::boolean)
 WHEN 'WEDNESDAY' -- works
  THEN ('false'::boolean)
 WHEN 'THURSDAY'
  THEN ('false'::boolean)
 WHEN 'FRIDAY'
  THEN ('true'::boolean)
 WHEN 'SATURDAY'
  THEN ('false'::boolean)
END) as res;
输出:

res
(空)

附言:

此代码:
选择upper(to_char(now()::timestamp,不带时区,'Day'))
工作并始终有输出。只是当我在其中添加一个CASE时,它会返回一个
null

使用它

extract(dow from  current_timestamp)
- This returns 0 for Sunday, 1 for Monday,...,6 for Saturday.
不要依赖语言字符串,最好使用数字

对于测试:

select
*
, case extract(dow from  dd)
    when 5 then 'true'::boolean else 'false'::boolean
  end
FROM generate_series
        ( '2017-11-01'::timestamp 
        , '2017-11-12'::timestamp
        , '1 day'::interval) dd
用这个代替

extract(dow from  current_timestamp)
- This returns 0 for Sunday, 1 for Monday,...,6 for Saturday.
不要依赖语言字符串,最好使用数字

对于测试:

select
*
, case extract(dow from  dd)
    when 5 then 'true'::boolean else 'false'::boolean
  end
FROM generate_series
        ( '2017-11-01'::timestamp 
        , '2017-11-12'::timestamp
        , '1 day'::interval) dd

问题的直接原因似乎是在日期名称后有尾随空格。用
trim
包装一周中某一天的表达式似乎可以解决问题:

select
    case trim(upper(to_char(now()::timestamp without time zone,'Day'))) 
    when 'SUNDAY'
    then ('false'::boolean)
    when 'MONDAY'
    then ('false'::boolean)
    when 'TUESDAY'
    then ('false'::boolean)
    when 'WEDNESDAY' -- works
    then ('false'::boolean)
    when 'THURSDAY'
    then ('false'::boolean)
    when 'FRIDAY'
    then ('true'::boolean)
    when 'SATURDAY'
    then ('false'::boolean)
    end as res;
正如@Used_by_给出的答案已经提到的,您可能希望从日期列中提取一周中的数字日,而不是按此路线


看来,问题的直接原因是日期名称后面有空格。用
trim
包装一周中某一天的表达式似乎可以解决问题:

select
    case trim(upper(to_char(now()::timestamp without time zone,'Day'))) 
    when 'SUNDAY'
    then ('false'::boolean)
    when 'MONDAY'
    then ('false'::boolean)
    when 'TUESDAY'
    then ('false'::boolean)
    when 'WEDNESDAY' -- works
    then ('false'::boolean)
    when 'THURSDAY'
    then ('false'::boolean)
    when 'FRIDAY'
    then ('true'::boolean)
    when 'SATURDAY'
    then ('false'::boolean)
    end as res;
正如@Used_by_给出的答案已经提到的,您可能希望从日期列中提取一周中的数字日,而不是按此路线


我需要知道日期名称,我必须检查是否可以在特定日期进行特定交易。你需要知道代表该日期名称的道琼斯指数好的,它现在可以工作了。谢谢为什么语言字符串不能很好地工作?为什么要冒着编写被某些设置破坏的代码的风险?(也许一个法国人想用法语来运行lang)星期几的数字是通用的,请使用数字。无需使用
案例
,您可以将其简化为
提取(dow from dd)=5
我需要知道日期名称,我必须检查特定的交易是否可以在特定的日期进行。你需要知道代表该日期的道琼斯指数好的,它现在起作用了。谢谢为什么语言字符串不能很好地工作?为什么要冒着编写被某些设置破坏的代码的风险?(也许一个法国人想让朗成为法国人)星期几的数字是通用的,使用这些数字。不需要
案例
,你可以将其简化为
提取(dow from dd)=5
false
为什么不简单地
选择提取(isodow from current_date)=5
如果要测试今天是否为星期五?
'false':布尔值可以简化为
false
如果要测试今天是否为星期五,为什么不简单地
选择extract(isodow from current_date)=5