Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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
Sql 如何从日期返回工作日名称_Sql_Oracle - Fatal编程技术网

Sql 如何从日期返回工作日名称

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,

我正在尝试在现有的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,如果你觉得答案有用,请接受它,通过这种方式,这个问题被认为已经解决了。