我有疑问,如果我在该日期的表的一列中将日期作为字符串,我想将表排序到数据库中。我该如何执行此操作?
create table dateTable (
_id INTEGER,
date varchar2(50),
name varchar2(50)
);
如果重要的话,DBMS就是Oracle。
问:那么日期会有多种格式,比如日期字段中的“dd-mm-yyyy”或“mm-dd-yyyy”吗?
答:是的,用户可以输入任何格式。
答案 0 :(得分:3)
再添加一列并插入日期值的格式。通过使用“to_date(date_value,date_format)”将varchar转换为日期,在order by子句中使用该列
create table dateTable (date_id INTEGER, date_value varchar2(50),
date_name varchar2(50),date_format varchar2(50));
insert into dateTable values (1,'20101212121212','date1','YYYYMMDDHH24MISS');
insert into dateTable values (1,'20101212','date1','YYYYMMDD');
insert into dateTable values (1,'20101213','date3','YYYYMMDD');
select * from dateTable
order by to_date(date_value,date_format) desc
答案 1 :(得分:3)
以数字数据类型存储数字,将字符数据类型中的字符串存储在日期数据类型中。如果你以任何其他方式做错,那么你将会对数据库进行反对,而数据库反过来似乎会对你起作用。 (我相信刚刚发生过。)
至于你的问题,你只需按日期栏排序。如果行以“错误”顺序出现,请再次阅读上一段。
select *
from dateTable
order by date;
答案 2 :(得分:1)
从dateTable中选择* ORDERBy to_dateto_date(date,'yyyymmdd');
或 select * from dateTable ORDERBy to_dateto_date(date);
to_date函数的语法是:
to_date( string1, [ format_mask ], [ nls_language ] )
string1是将转换为日期的字符串。
format_mask是可选的。这是用于将string1转换为日期的格式。
nls_language是可选的。这是用于将string1转换为日期的nls语言。
答案 3 :(得分:1)
如果您允许“任何格式”,则无法以varchar格式对日期进行排序。 尝试添加具有指定修复格式的计算值的第二列。
答案 4 :(得分:1)
您无法根据需要对数据库进行排序。您需要有一些类型格式进行排序,因为它无法按所有格式排序。
答案 5 :(得分:0)
确定!如果我已经使用了date数据类型 如果我想接受不同的话 日期格式然后我可以做什么 那种情况
这在很大程度上取决于您为应用程序使用的语言。通常,您将从用户区域设置中确定日期格式,作为国际化/本地化基础架构的一部分。这意味着使用的日期格式与用户的语言环境特别相关(即en_US,en_GB,de_DE等)。如果你想接受任何人的任何格式而不使用语言环境或用户指定的格式,那么你需要编写一个算法来尝试猜测格式,我不认为有任何方法可以使该算法完全证明。
在数据库中不使用单一日期格式只是一个糟糕的设计决定。如果你想接受来自用户的多种格式,这是正常和好的事情,但在插入或使用它进行查询之前,你应该在应用程序端处理转换为DB格式。
答案 6 :(得分:0)
HI直接在查询中尝试这个..它适用于我的应用程序
按m.created_on desc命令限制0,5