如何提取日期并将其转换为3个字母的字符?我要处理的是一列以我当地的本地语言写的3个字母月的专栏。我正在尝试的代码给了我一个错误:
SELECT
DATE,
CASE
WHEN (EXTRACT (MONTH FROM DATE))= CAST(1 AS CHAR(3)) THEN CAST('JAN' AS CHAR(3))
WHEN (EXTRACT (MONTH FROM DATE))=CAST(2 AS CHAR(3)) THEN CAST('FEV' AS CHAR(3))
WHEN (EXTRACT (MONTH FROM DATE))=CAST(3 AS CHAR(3)) THEN CAST('MAR' AS CHAR(3))
WHEN (EXTRACT (MONTH FROM DATE))=CAST(4 AS CHAR(3)) THEN CAST('ABR' AS CHAR(3))
END
AS MONTH,
感谢任何帮助
答案 0 :(得分:0)
如果显示的查询是您的实际查询,那么您会收到错误消息“令牌未知”,因为DATE
是保留字,如果不明确引用就不能用作标识符。重命名您的列(高度建议),或在查询中使用"DATE"
而不是DATE
。
EXTRACT(MONTH FROM somedate)
的返回值是一个整数,而不是CHAR(3)
,因此,(EXTRACT (MONTH FROM DATE))= CAST(1 AS CHAR(3))
中的强制转换将导致额外的开销,因为Firebird需要转换{{1}的结果从整数到字符串以评估条件。相反,您应该使用EXTRACT
。
可以使用searched case来简化代码,因为这样可以避免重复提取:
EXTRACT(MONTH FROM "DATE") = 1
字符文字已经是CASE EXTRACT (MONTH FROM "DATE")
WHEN 1 THEN 'JAN'
WHEN 2 THEN 'FEV'
WHEN 3 THEN 'MAR'
-- ... etc
END
(在这种情况下为CHAR
),因此不需要强制转换。但是,如果您确实需要进行强制转换,那么我建议将强制转换放在整个CHAR(3)
周围,而不要放在CASE ... END
子句中的各个值周围。
如果您想进一步简化,也可以使用DECODE
函数:
THEN
答案 1 :(得分:-2)
在oracle上,您可以使用to_char函数;
从双中选择to_char(sysdate,'mon','NLS_DATE_LANGUAGE = English')作为月份
您可以提供“您的本地语言”,而不是英语,如果您的会话默认语言已经是您想要的语言,那么就不需要3rd参数了;
从双中选择to_char(sysdate,'mon')作为月份
答案 2 :(得分:-2)
我不知道怎么用火鸟来做 但您可以在Microsoft sql服务器中执行以下操作:
SELECT
DATE,
CASE
when DATEPART(MONTH,[DATE])=1 THEN CAST('JAN' AS CHAR(3))
when DATEPART(MONTH,[DATE])=2 THEN CAST('FEV' AS CHAR(3))
when DATEPART(MONTH,[DATE])=3 THEN CAST('MAR' AS CHAR(3))
end
from YourTable