关于数据库中字段类型为date类型的问题

hlaeoi 2011-10-26 10:57:10
我想把这个字段的所有数据按照特定格式存在比如(yyyy-mm-dd hh24:mi:ss)的形式保存在原字段下该如何写oracle语句?换种说法就是我想要将这个字段下的数据进行数据格式化后在存入原字段
...全文
1095 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlaeoi 2011-10-31
  • 打赏
  • 举报
回复
感谢大神们的帮助,我发现错误所在了,具体问题是什么我就不多说了,我觉得丢人…………,再次感谢,并再次结贴
hlaeoi 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 benchim888 的回复:]

楼主已经将邮件发送,有需要者可以留下邮箱,我转发。

TO:楼主
你图片里面的日期“显示格式是” 【yyyy-mm-dd am hh:mi:ss】
只举出一个反例:你运行如下语句
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

再执行你的sql

1、如果格式未变 还是诸如 [2011-03……
[/Quote]
我不得不告诉你,我已经试过了你所说的方法,还是一样的效果,是不是果断还要图?
BenChiM888 2011-10-27
  • 打赏
  • 举报
回复
楼主已经将邮件发送,有需要者可以留下邮箱,我转发。

TO:楼主
你图片里面的日期“显示格式是” 【yyyy-mm-dd am hh:mi:ss】
只举出一个反例:你运行如下语句
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

再执行你的sql

1、如果格式未变 还是诸如 [2011-03-01 上午 10:00:01] 这样的,说明你的说法是正确的,“存储格式是固定的”。
2、否则的话,不用我再说了吧,治病救人 考验的不仅仅是医生,还有病人的配合程度。



[Quote=引用 6 楼 hlaeoi 的回复:]

引用 5 楼 benchim888 的回复:

怎么可能

date类型数据就是日期型,不存在特定格式,特定格式只是显示问题

PS. 你截个图法我邮箱吧,我也想见识一下。benchim888@foxmail.com



引用 4 楼 hlaeoi 的回复:
引用 1 楼 benchim888 的回复:

oracle中date类型数据 包含 年月日时分秒等信息,总之……
[/Quote]
xiaoyu871225 2011-10-27
  • 打赏
  • 举报
回复
楼主贴出来给大家长长见识呗!!求真相
hlaeoi 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 benchim888 的回复:]

SQL code

SQL> select sysdate from dual;

SYSDATE
--------------
27-10月-11

SQL>alter session set nls_date_format='yyyy-mm-dd';

会话已更改。

SQL> select sysdate from dual;

SYSDATE
----------
2011-10-27……
[/Quote]
我正是这样做的!没有任何变化
hlaeoi 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lxyzxq2008 的回复:]

引用 9 楼 hlaeoi 的回复:

引用 8 楼 benchim888 的回复:

楼主已经将邮件发送,有需要者可以留下邮箱,我转发。

TO:楼主
你图片里面的日期“显示格式是” 【yyyy-mm-dd am hh:mi:ss】
只举出一个反例:你运行如下语句
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss……
[/Quote]
肯定是date类型,如果跟工具有关的话,那应该所有的date类型数都是这个显示模式,系统的设置上也不可能有问题,同样是上一个原因,我现况是有一个date型字段是特定格式,别的都是默认格式
yinan9 2011-10-27
  • 打赏
  • 举报
回复
通过不同设置的客户端,日期显示会略有不同,但是其实数据都是一样的。
yinan9 2011-10-27
  • 打赏
  • 举报
回复
只是现实问题而已,不需要转换显示格式。
除非你想把数据放到字符类型的字段里面,这才需要转换。
BenChiM888 2011-10-27
  • 打赏
  • 举报
回复

SQL> select sysdate from dual;

SYSDATE
--------------
27-10月-11

SQL>alter session set nls_date_format='yyyy-mm-dd';

会话已更改。

SQL> select sysdate from dual;

SYSDATE
----------
2011-10-27

SQL>



[Quote=引用 9 楼 hlaeoi 的回复:]

引用 8 楼 benchim888 的回复:

楼主已经将邮件发送,有需要者可以留下邮箱,我转发。

TO:楼主
你图片里面的日期“显示格式是” 【yyyy-mm-dd am hh:mi:ss】
只举出一个反例:你运行如下语句
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

再执行你的sql

1、如果……
[/Quote]
lxyzxq2008 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hlaeoi 的回复:]

引用 8 楼 benchim888 的回复:

楼主已经将邮件发送,有需要者可以留下邮箱,我转发。

TO:楼主
你图片里面的日期“显示格式是” 【yyyy-mm-dd am hh:mi:ss】
只举出一个反例:你运行如下语句
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

再执行你的sql

1、如果……
[/Quote]
这个貌似看起来是一件很灵异的事件,我觉得只能是如下几种可能:
1。你的数据显示是在什么工具中看到的,是否和这个工具本身有关系?
比如:同样是日期类型:在ob中看到的和在sql dev中看到的是不一样的显示效果
2。你的字段的类型确定是date?
有没有可能是不同的?比如char什么的?
3。你的系统是纳尼系统?安装oracle时语言选定,以及你的环境变量配置
hlaeoi 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 benchim888 的回复:]

怎么可能

date类型数据就是日期型,不存在特定格式,特定格式只是显示问题

PS. 你截个图法我邮箱吧,我也想见识一下。benchim888@foxmail.com



引用 4 楼 hlaeoi 的回复:
引用 1 楼 benchim888 的回复:

oracle中date类型数据 包含 年月日时分秒等信息,总之就是精确到秒的时间信息。
你说的 yyyy-mm-……
[/Quote]
明天发你
BenChiM888 2011-10-26
  • 打赏
  • 举报
回复
怎么可能

date类型数据就是日期型,不存在特定格式,特定格式只是显示问题

PS. 你截个图法我邮箱吧,我也想见识一下。benchim888@foxmail.com



[Quote=引用 4 楼 hlaeoi 的回复:]
引用 1 楼 benchim888 的回复:

oracle中date类型数据 包含 年月日时分秒等信息,总之就是精确到秒的时间信息。
你说的 yyyy-mm-dd hh24:mi:ss 只是date类型数据的一种显示格式。

换句话说,只要这个字段是 date 类型,你可以随时按照不同格式进行数据显示

如:假设 字段名称为 logdate

to_char(logdate,'……
[/Quote]
hlaeoi 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 benchim888 的回复:]

oracle中date类型数据 包含 年月日时分秒等信息,总之就是精确到秒的时间信息。
你说的 yyyy-mm-dd hh24:mi:ss 只是date类型数据的一种显示格式。

换句话说,只要这个字段是 date 类型,你可以随时按照不同格式进行数据显示

如:假设 字段名称为 logdate

to_char(logdate,'yyyy-mm-dd hh24:mi:ss') ……
[/Quote]
但是我数据库另一个date类型字段就是以特定格式存入的,那是怎么回事呢,现在我希望我能将date类型统一存成那个形式不知道可不可以用数据库语言直接实现,当然不是靠改本机数据库的默认显示格式来实现……
BenChiM888 2011-10-26
  • 打赏
  • 举报
回复
补充一句,楼主对date类型数据的认识有偏差,可能是由于你查询出的结果显示格式问题。

对于显示格式:
1、to_char 函数是最方便的,写出一个sql可以运行在任何oracle数据库上,而且显示结果一致。

2、而显示格式数据库有默认形式,换句话说,假设字段 logdate 是date类型
select logdate from table_name;
显示的结果其实就是 select to_char(logdate,数据库默认格式) from table_name;
oracle自动做了隐式类型转换,而对于默认的显示格式,2楼给出就是调整的方法。

不过建议你不要随便动数据库的默认参数,你倒是可以修改你登陆session的默认格式。

你可以试验: alter session set nls_date_Format='yyyy-mm-dd hh24:mi:ss';
然后再查,显示格式就变了。

alter session set nls_date_Format='yyyy/mm/dd hh24:mi:ss';
然后再查,显示格式又变了。

这个是帮助你理解,修改不会影响他人也不需要重启数据库,当你退出后再登入,参数还是数据库默认的。
NLP爱好者 2011-10-26
  • 打赏
  • 举报
回复
修改数据库的参数 nls_date_format 的格式为 yyyy-mm-dd hh24:mi:ss

1、如果是oracle安装在 windows机器上:
修改注册表中:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1
添加一个字符串的值 名称:NLS_DATE_FORMAT 值 :YYYY-MM-DD HH24:MI:SS (你要的日期格式)
2、如果是oracle安装在 linux机器上:
alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile
然后重启数据库

BenChiM888 2011-10-26
  • 打赏
  • 举报
回复
oracle中date类型数据 包含 年月日时分秒等信息,总之就是精确到秒的时间信息。
你说的 yyyy-mm-dd hh24:mi:ss 只是date类型数据的一种显示格式。

换句话说,只要这个字段是 date 类型,你可以随时按照不同格式进行数据显示

如:假设 字段名称为 logdate

to_char(logdate,'yyyy-mm-dd hh24:mi:ss') 显示的就是 2011-10-26 23:07:01 这样的数据
to_char(logdate,'yyyy-mm-dd hh:mi:ss') 显示的就是 2011-10-26 11:07:01 这样的数据
to_char(logdate,'yyyy/mm/dd hh:mi:ss') 显示的就是 2011/10/26 11:07:01 这样的数据

如果你想以固定格式存储的话,这个字段只能是 varchar2 或者 char类型,然后提前将日期型转化成固定格式然后存储到数据库中,
这样你查询的时候,不需要转换直接显示。

如:logdate varchar2(10)
insert into table_name(logdate) values(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');

这样就是把当前日期按照 'yyyy-mm-dd hh24:mi:ss' 的形式转换成字符串后 存入到logdate字段中,
需要查询的时候 直接 select logdate from table_name 即可。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧