Date 如何将一周中的某一天与输入IF语句进行比较?
我需要使用IF将日期(日期格式)与字符串“SUNDAY”(即今天)进行比较。 如果今天是星期天,则代码仍将打印ELSE语句 今天是星期天,但它仍然说今天不是星期天Date 如何将一周中的某一天与输入IF语句进行比较?,date,plsql,Date,Plsql,我需要使用IF将日期(日期格式)与字符串“SUNDAY”(即今天)进行比较。 如果今天是星期天,则代码仍将打印ELSE语句 今天是星期天,但它仍然说今天不是星期天 默认情况下,到_char(datetime)的输出是空白填充的,应该是IF语句而不是ELSE语句: SQL> select '"'||to_char(sysdate,'DAY')||'"' as actual_value from dual; ACTUAL_VALUE ----------------------------
默认情况下,
到_char(datetime)
的输出是空白填充的,应该是IF语句而不是ELSE语句:
SQL> select '"'||to_char(sysdate,'DAY')||'"' as actual_value from dual;
ACTUAL_VALUE
--------------------------------------
"SUNDAY "
使用fm
修饰符可以避免这种情况:
SQL> select '"'||to_char(sysdate,'fmDAY')||'"' as actual_value from dual;
ACTUAL_VALUE
--------------------------------------
"SUNDAY"
但是,如果会话未设置为默认为英语,则指定日期语言更安全(并且指定较短的格式更有效):
更短(“DY”而不是“DAY”)和更安全(确保“SUN”而不是“SON”、“DIM”等):
默认情况下,
到_char(datetime)
的输出为空白填充:
SQL> select '"'||to_char(sysdate,'DAY')||'"' as actual_value from dual;
ACTUAL_VALUE
--------------------------------------
"SUNDAY "
使用fm
修饰符可以避免这种情况:
SQL> select '"'||to_char(sysdate,'fmDAY')||'"' as actual_value from dual;
ACTUAL_VALUE
--------------------------------------
"SUNDAY"
但是,如果会话未设置为默认为英语,则指定日期语言更安全(并且指定较短的格式更有效):
更短(“DY”而不是“DAY”)和更安全(确保“SUN”而不是“SON”、“DIM”等):
问题是
到字符(…,'DAY')
。它返回一个固定长度的字符串,与一周中的哪一天无关。长度取决于NLS\u日期\u语言
。例如,对于英语,一周中最长的一天的名称是星期三,共九个字符。然后,对于一周中的其他任何一天,TO_CHAR(…,'day')
返回一个长度相同的字符串(英语为九个字符),根据需要右键填充空格
修复代码的最简单方法是将比较的左侧包装在TRIM()
中
您的代码中有很多奇怪的东西(例如,在
ELSE
分支中,您应该说“今天不是星期天”,而不是“今天不是……不管TO_CHAR返回了什么”),但这不是您所要求的。上面给出了您问题的答案,不再赘述。问题是to_CHAR(…,'DAY')
。它返回一个固定长度的字符串,与一周中的哪一天无关。长度取决于NLS\u日期\u语言
。例如,对于英语,一周中最长的一天的名称是星期三,共九个字符。然后,对于一周中的其他任何一天,TO_CHAR(…,'day')
返回一个长度相同的字符串(英语为九个字符),根据需要右键填充空格
修复代码的最简单方法是将比较的左侧包装在TRIM()
中
您的代码中有很多奇怪的东西(例如,在
ELSE
分支中,您应该说“今天不是星期天”,而不是“今天不是……不管TO_CHAR返回了什么”),但这不是您所要求的。上面给出了您问题的答案,没有更多。请将您的代码添加到问题中,而不是链接到代码屏幕。我尝试过,但它一直说我的代码格式不正确,请将您的代码添加到问题中,而不是链接到代码屏幕快照。我尝试过,但它一直说我的代码格式不正确,这是不正确的。