楼主: habulu

如何将字符型数据插入表时自动转成日期型

[复制链接]
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
11#
发表于 2016-10-26 12:55 | 只看该作者
〇〇 发表于 2016-10-24 12:48
前3个date
第4个timestamp

是。那格式各不相同。
如果更多的看:
月度:YYYY-MM
铁路的时刻表:YYYY-MM-DD HH24:MI
等等,一个表内什么格式都有。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
12#
发表于 2016-10-26 13:10 | 只看该作者
yulihua49 发表于 2016-10-26 12:55
是。那格式各不相同。
如果更多的看:
月度:YYYY-MM

内部存储可以统一,输出可以to_char

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
13#
发表于 2016-10-26 13:23 | 只看该作者
本帖最后由 yulihua49 于 2016-10-26 13:26 编辑
〇〇 发表于 2016-10-26 13:10
内部存储可以统一,输出可以to_char

内部本来就是统一的。说的就是IO时。
你只好to_char了,省不掉。这点不如INFOMIX好,它的列定义就定义了缺省格式,以后在SQL里就无需这么罗嗦了。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
14#
发表于 2016-10-26 14:34 | 只看该作者
create table dt(a int,b date,c date,e timestamp);
SQL> insert into dt values(1,
  2  to_date('2000-10-30','YYYY-MM-DD'),
  3  to_date('201012211120','yyyymmddhh24mi'),
  4  to_timestamp('20150623123456.9913','yyyymmddhh24miss.ff')
  5  );

已创建 1 行。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
15#
发表于 2016-10-26 22:02 | 只看该作者
yulihua49 发表于 2016-10-26 13:23
内部本来就是统一的。说的就是IO时。
你只好to_char了,省不掉。这点不如INFOMIX好,它的列定义就定义了 ...

设计数据类型一定要坚持用DATE或TIMESTAMP。
至于输出格式,想怎么变就怎么变,大不了写个视图,只要TO_CHAR一次。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
16#
发表于 2016-10-27 10:31 | 只看该作者
本帖最后由 yulihua49 于 2016-10-27 11:31 编辑
〇〇 发表于 2016-10-26 14:34
create table dt(a int,b date,c date,e timestamp);
SQL> insert into dt values(1,
  2  to_date('200 ...

说的是。想省掉格式化函数。
我现在的办法是为每个表建模板,模板里规定了相关日期列的格式。
语句自动生成。set和where子句自己写,不写格式。等生成语句时自动添加。
  1. <p><p>RC_MID:7F6F3CDBE700 10/30 12:45'34 OAD_mk_ins sth=0,INSERT INTO CMS_PROD.CUT_PI_ENTRY (streaming_session_id,data_version,txn_class,txn_revision,txn_ssn_a,txn_ssn_b,ols_txn_type,settlement_date,application_validation_flags,host_name,multipart_txn_count,issuer_abort_reason,acquirer_id,destination_participant_id,account_type,portioned_txn_flag,format_version,txn_date_time,source_participant_id,device_id,sam_id,udsn,service_participant_id,device_location,device_ssn,business_date,transaction_status,cd_set_version,reconciliation_date,ud_type,ud_subtype,device_home_depot,mass_installation_id,iss_exception_proc_abrtd,iss_exception,iss_txn_reflection,cch_flags_txn_portion,cch_flags_txn_summarised,cch_flags_txn_forwarded,cch_flags_txn_apportioned,cch_txn_good_for_summaries,cch_no_further_proc,cch_exception,cch_txn_not_to_issuer,cch_txn_approved,exception_list,card_issuer_id,card_serial_number,card_type,card_life_cycle_count,card_action_sequence_number,route_line_id,route_direction,passenger_type,journey_type,current_location,number_of_passengers,number_of_zones,previous_operator,trip_origin_location,trip_previous_location,lav_sam_id,lav_participant_id,lav_date,lav_txn_value,lav_remaining_rides,lav_ptsn,lav_method_of_payment,data_is_valid,invoice_printed,num_rides,remaining_rides,product_issuer_id,product_serial_number,product_type,product_action_sequence_number,ptsn,application_provider_id,application_serial_number,application_personalise_cat,app_action_sequence_number,application_type,application_passenger_type,key_version,v_start_date_time,v_end_date_time,v_duration,v_distance_origin,v_distance_destination,v_distance_distance,v_journey_period_journeys,v_journey_transfers,v_route_routes,v_location_locations,restrictions_day,restrictions_time,v_period_duration,v_origin,v_destination,pass_end_date_time,lav_pass_expiry_date_time,transaction_value,currency_indicator_fin_details,sales_tax,discount,tax_rate,tax_code,number_of_payments,payment_method,payment_value,partial_transaction_value,partial_sales_tax,purse_remaining_value,lav_remaining_value,lav_amount_paid,invoice_not_printed,start_of_journey,delay_date,delay_station_location,delay_operation_mode,first_use_activation,value_per_ride,total_journey_amount,city_industry_code) VALUES ( :1, :2, :3, :4, :5, :6, :7,TO_DATE(:8,'YYYY/MM/DD'), :9, :10, :11, :12, :13, :14, :15, :16, :17,TO_DATE(:18,'YYYY/MM/DD HH24:MI:SS'), :19, :20, :21, :22, :23, :24, :25,TO_DATE(:26,'YYYY/MM/DD'), :27, :28,TO_DATE(:29,'YYYY/MM/DD'), :30, :31, :32, :33, :34, :35, :36, :37, :38, :39, :40, :41, :42, :43, :44, :45, :46, :47, :48, :49, :50, :51, :52, :53, :54, :55, :56, :57, :58, :59, :60, :61, :62, :63,TO_DATE(:64,'YYYY/MM/DD'), :65, :66, :67, :68, :69, :70, :71, :72, :73, :74, :75, :76, :77, :78, :79, :80, :81, :82, :83, :84,TO_DATE(:85,'YYYY-MM-DD HH24:MI:SS'),TO_DATE(:86,'YYYY-MM-DD HH24:MI:SS'), :87, :88, :89, :90, :91, :92, :93, :94, :95, :96, :97, :98, :99,TO_DATE(:100,'YYYY-MM-DD HH24:MI:SS'),TO_DATE(:101,'YYYY-MM-DD HH24:MI:SS'), :102, :103, :104, :105, :106, :107, :108, :109, :110, :111, :112, :113, :114, :115, :116, :117,TO_DATE(:118,'YYYY/MM/DD'), :119, :120, :121, :122, :123, :124)
复制代码
这个语句自动生成的,我可没精神写这破玩意儿。


使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
17#
发表于 2016-10-27 22:26 | 只看该作者
yulihua49 发表于 2016-10-27 10:31
说的是。想省掉格式化函数。
我现在的办法是为每个表建模板,模板里规定了相关日期列的格式。
语句自动 ...

还好你的存储用的是DATE格式不是字符串,要不然可要被我鄙视了。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
18#
发表于 2016-10-28 15:36 | 只看该作者
本帖最后由 yulihua49 于 2016-10-28 15:39 编辑
newkid 发表于 2016-10-27 22:26
还好你的存储用的是DATE格式不是字符串,要不然可要被我鄙视了。

我是日期类型的拥趸,一直使用日期类型。强调项目里能用日期时间类型的尽量用。
铁路,是时间敏感系统,绝大多数任务,都是在计算时间。日期类型进行时间计算有天然优势。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
19#
发表于 2016-10-28 15:48 | 只看该作者
本帖最后由 yulihua49 于 2016-10-28 15:49 编辑
newkid 发表于 2016-10-27 22:26
还好你的存储用的是DATE格式不是字符串,要不然可要被我鄙视了。

那个语句里有不同的日期格式。怎么自动实现的呢?
CUT_PI_ENTRY|SETTLEMENT_DATE|CH_JUL|4|YYYY/MM/DD||
CUT_PI_ENTRY|TXN_DATE_TIME|CH_TIME|8|YYYY/MM/DD HH24:MI:SS||
CUT_PI_ENTRY|SAM_ID|CH_INT|4|||
CUT_PI_ENTRY|DELAY_DATE|CH_JUL|4|YYYY/MM/DD||
CUT_PI_ENTRY|LAV_DATE|CH_JUL|4|YYYY/MM/DD||
CUT_PI_ENTRY|BUSINESS_DATE|CH_JUL|4|YYYY/MM/DD||
CUT_PI_ENTRY|RECONCILIATION_DATE|CH_JUL|4|YYYY/MM/DD||

这个数据加到某一个字典表里,生成器读那个字典表,就知道哪个列用哪个格式。就是一个补充字典。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
20#
发表于 2016-10-28 19:36 | 只看该作者
yulihua49 发表于 2016-10-28 15:48
那个语句里有不同的日期格式。怎么自动实现的呢?
CUT_PI_ENTRY|SETTLEMENT_DATE|CH_JUL|4|YYYY/MM/DD|| ...

不错.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表