Sql 如何从日期返回工作日名称
我正在尝试在现有的date列旁边添加一列,该列给出了一周中相应的日期名称Sql 如何从日期返回工作日名称,sql,oracle,Sql,Oracle,我正在尝试在现有的date列旁边添加一列,该列给出了一周中相应的日期名称 SELECT DISTINCT a.transaction_date, to_char(date 'a.transaction_date','DAY') as Day FROM transactions_table a 尝试:周一、周二、周三等。。遗憾的是,数据库返回的是ORA-01841错误。通常,“我的日期”列会返回如下日期:dd mmm yy- SELECT DISTINCT a.transaction_date,
SELECT DISTINCT
a.transaction_date,
to_char(date 'a.transaction_date','DAY') as Day
FROM transactions_table a
尝试:周一、周二、周三等。。遗憾的是,数据库返回的是ORA-01841错误。通常,“我的日期”列会返回如下日期:dd mmm yy-
SELECT DISTINCT
a.transaction_date,
to_char(date a.transaction_date,'DAY') as Day
FROM transactions_table a
试试下面-
SELECT DISTINCT
a.transaction_date,
to_char(date a.transaction_date,'DAY') as Day
FROM transactions_table a
您可以尝试
Dy
模式:
select to_char(transaction_date,'Dy')
from transactions_table
如果需要不同的语言,请考虑第三个参数:
select to_char(transaction_date,'Dy','nls_date_language=turkish')
from transactions_table
P.S.I在第一次查询中认为英语是缺省的,如果不是数据库的默认语言,则用“<代码>土耳其语< /代码>代替<代码>英语< /代码>来考虑第二个查询。 < P>可以尝试<代码> Dy 模式:
select to_char(transaction_date,'Dy')
from transactions_table
如果需要不同的语言,请考虑第三个参数:
select to_char(transaction_date,'Dy','nls_date_language=turkish')
from transactions_table
P.S.I在第一次查询中认为英语是缺省的,如果不是数据库的默认语言,则用“<代码>土耳其语< /代码>代替<代码>英语< /代码>来考虑第二个查询。 < P>
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DAY') as Day
FROM transactions_table a
如果它是varchar2,那么您可以首先使用日期格式将其转换为日期
SELECT DISTINCT
a.transaction_date,
to_char(to_date(a.transaction_date, 'dd/mm/yyyy'),'DAY') as Day
FROM transactions_table a
例如:
select to_char(to_date('08/09/2019', 'dd/mm/yyyy'),'DAY') as Day from dual;
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DY','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a
我假设事务_date是一个日期数据类型
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DAY') as Day
FROM transactions_table a
如果它是varchar2,那么您可以首先使用日期格式将其转换为日期
SELECT DISTINCT
a.transaction_date,
to_char(to_date(a.transaction_date, 'dd/mm/yyyy'),'DAY') as Day
FROM transactions_table a
例如:
select to_char(to_date('08/09/2019', 'dd/mm/yyyy'),'DAY') as Day from dual;
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DY','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a
date“a.transaction\u date”
尝试将a与可变列值混合,但同时将列名放在单引号内,您最终会执行以下操作:
to_date('a.transaction_date', 'YYYY-MM-DD')
这也得到了ORA-01841,原因可能更清楚
如果transaction\u date
已经是一个日期,则只需参考该日期即可:
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DAY') as Day
FROM transactions_table a
如果它是一个字符串-它不应该是然后将该值正确转换为日期:
SELECT DISTINCT
a.transaction_date,
to_char(to_date(a.transaction_date, 'YYYY-MM-DD'),'DAY') as Day
FROM transactions_table a
。。。或者使用任何合适的格式掩码
还要注意,DAY
(以及缩写的DY
,或DY
,这可能是您实际需要的)输出取决于您的NLS日期语言,但如果您希望它始终使用英语,您可以覆盖它,例如:
select to_char(to_date('08/09/2019', 'dd/mm/yyyy'),'DAY') as Day from dual;
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DY','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a
使用CTE进行快速演示:
-- CTE for dummy date
with transactions_table(transaction_date) as (
select date '2019-01-01' from dual
union all
select date '2019-09-01' from dual
)
-- actual query
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'Dy','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a
/
TRANSACTIO DAY
---------- ------------
2019-01-01 Tue
2019-09-01 Sun
date“a.transaction\u date”
尝试将a与可变列值混合,但同时将列名放在单引号内,您最终会执行以下操作:
to_date('a.transaction_date', 'YYYY-MM-DD')
这也得到了ORA-01841,原因可能更清楚
如果transaction\u date
已经是一个日期,则只需参考该日期即可:
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DAY') as Day
FROM transactions_table a
如果它是一个字符串-它不应该是然后将该值正确转换为日期:
SELECT DISTINCT
a.transaction_date,
to_char(to_date(a.transaction_date, 'YYYY-MM-DD'),'DAY') as Day
FROM transactions_table a
。。。或者使用任何合适的格式掩码
还要注意,DAY
(以及缩写的DY
,或DY
,这可能是您实际需要的)输出取决于您的NLS日期语言,但如果您希望它始终使用英语,您可以覆盖它,例如:
select to_char(to_date('08/09/2019', 'dd/mm/yyyy'),'DAY') as Day from dual;
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'DY','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a
使用CTE进行快速演示:
-- CTE for dummy date
with transactions_table(transaction_date) as (
select date '2019-01-01' from dual
union all
select date '2019-09-01' from dual
)
-- actual query
SELECT DISTINCT
a.transaction_date,
to_char(a.transaction_date,'Dy','NLS_DATE_LANGUAGE=ENGLISH') as Day
FROM transactions_table a
/
TRANSACTIO DAY
---------- ------------
2019-01-01 Tue
2019-09-01 Sun
退房
退房
看看这个:什么数据类型是
a.transaction\u date
?为什么你要把它放在单引号里,当它是一列时,试着让它成为日期文字的一部分?你还使用了日期格式模型,并引用了两次日期名称;但随后显示了日期缩写(周一而非周一)。你到底想要哪一个?是的,我不应该用单引号,因为这个字段是一个日期字段。完整的大写名称是可以的。看看这个:什么数据类型是a.transaction\u date
?为什么你要把它放在单引号里,当它是一列时,试着让它成为日期文字的一部分?你还使用了日期格式模型,并引用了两次日期名称;但随后显示了日期缩写(周一而非周一)。你到底想要哪一个?是的,我不应该用单引号,因为这个字段是一个日期字段。大写全名可以。在to_char()
函数中有一个虚假的日期
关键字,日期
格式模型将返回当天的全名,而不是三个字母的缩写版本。在to_char()中有一个虚假的日期
关键字
函数和日期
格式模型将返回当天的全名,而不是三个字母的缩写版本。'a.transaction\u date'
是字符串文字。不带单引号的是表别名和列名。另外,DAY
格式模型将返回当天的全名,而不是名称的缩写版本。是的,这是一种日期类型。您的第一个解决方案有效。谢谢<代码>'a.transaction\u date'是字符串文字。不带单引号的是表别名和列名。另外,DAY
格式模型将返回当天的全名,而不是名称的缩写版本。是的,这是一种日期类型。您的第一个解决方案有效。谢谢“蒙太格”缩写为“莫”;如果日期语言设置为英语,则您将获得“周一”和“周一”-无需替换。(OP显示了英文缩写,所以我假设他们默认使用的语言是…“MONTAG”缩写为“MO”;如果日期语言设置为英语,则您将获得“周一”和“周一”-无需替换。(OP显示了英文缩写,所以我假设这是他们默认使用的语言…)欢迎@Roostir,如果你觉得答案有用,请接受它,这样,问题就被认为已经解决了。欢迎@Roostir,如果你觉得答案有用,请接受它,通过这种方式,这个问题被认为已经解决了。