p********a 发帖数: 5352 | 1 The date field (ym1) in the table is numeric like 201401 (year + month). It
is difficult to compare this date with other date fields since it is numeric
What is wrong with the this experision?
where ym1 BETWEEN
TO_NUMBER(TO_CHAR(DATEADD(YY,12,dob),'YYYYMM'),999999) AND
TO_NUMBER(TO_CHAR(DATEADD(YY,13,dob),'YYYYMM'),999999)
What is the best way to make this date between the 12th birthday and 13th
birthday?
Thanks in advance! |
tj 发帖数: 957 | 2 or
where ym1 between to_char (dob, 'yyyymm') - 1300 and to_char (dob, 'yyyymm')
- 1200 |
n****f 发帖数: 905 | 3 where ym1 BETWEEN
TO_DATE (your_date_1, 'YYYYMM') and TO_DATE (your_date_2, 'YYYYMM')
It
numeric
【在 p********a 的大作中提到】 : The date field (ym1) in the table is numeric like 201401 (year + month). It : is difficult to compare this date with other date fields since it is numeric : What is wrong with the this experision? : where ym1 BETWEEN : TO_NUMBER(TO_CHAR(DATEADD(YY,12,dob),'YYYYMM'),999999) AND : TO_NUMBER(TO_CHAR(DATEADD(YY,13,dob),'YYYYMM'),999999) : What is the best way to make this date between the 12th birthday and 13th : birthday? : Thanks in advance!
|
c*****d 发帖数: 6045 | 4 首先,这种设计就是没事找事。
日期型的就用日期型,容易操作,比如dateadd, + 1 day, trunc, etc
显示给用户的时候只要用to_char(ym1, 'yyyymm')就屏蔽了dd
其次,Oracle没有DATEADD这么个函数
如果现在这个字段是数值型的
where ym1 BETWEEN
TO_NUMBER(TO_CHAR(add_months(dob,12*12),'YYYYMM')) AND
TO_NUMBER(TO_CHAR(add_months(dob, 13*12),'YYYYMM')) |
s**********o 发帖数: 14359 | 5 YYYYMM还是有好处的,比如DW的数据都是这么存的,多数公司只关心MONTH以上的数据
其实就按YYYY*100+MM,当数字算好了
【在 c*****d 的大作中提到】 : 首先,这种设计就是没事找事。 : 日期型的就用日期型,容易操作,比如dateadd, + 1 day, trunc, etc : 显示给用户的时候只要用to_char(ym1, 'yyyymm')就屏蔽了dd : 其次,Oracle没有DATEADD这么个函数 : 如果现在这个字段是数值型的 : where ym1 BETWEEN : TO_NUMBER(TO_CHAR(add_months(dob,12*12),'YYYYMM')) AND : TO_NUMBER(TO_CHAR(add_months(dob, 13*12),'YYYYMM'))
|
n****f 发帖数: 905 | 6 Coolbid 說的對.
儘管你能用變通的方法解決現實問題, 但是, 你們的這種設計是有問題的。
儘管,理論上不一定100% 出問題, 但是, 有潛在的缺欠, 在未來出問題的機率比較
大。
【在 s**********o 的大作中提到】 : YYYYMM还是有好处的,比如DW的数据都是这么存的,多数公司只关心MONTH以上的数据 : 其实就按YYYY*100+MM,当数字算好了
|
s**********o 发帖数: 14359 | 7 但我用的时候好用啊,比如1995年6月到2015年3月的所有SALE的总和,数字的比较比
DATE快得多,理论上的问题在哪里,除非是千年的问题,多数公司不在乎3000年的,
如果我已经ROLL到MONTH LEVEL了,为什么要存成1995-06-01:00:00:00,然后还
要去比较日期和时间,多此一举
【在 n****f 的大作中提到】 : Coolbid 說的對. : 儘管你能用變通的方法解決現實問題, 但是, 你們的這種設計是有問題的。 : 儘管,理論上不一定100% 出問題, 但是, 有潛在的缺欠, 在未來出問題的機率比較 : 大。
|
B*****g 发帖数: 34098 | 8 防止有人存20150229,嘿嘿
【在 s**********o 的大作中提到】 : 但我用的时候好用啊,比如1995年6月到2015年3月的所有SALE的总和,数字的比较比 : DATE快得多,理论上的问题在哪里,除非是千年的问题,多数公司不在乎3000年的, : 如果我已经ROLL到MONTH LEVEL了,为什么要存成1995-06-01:00:00:00,然后还 : 要去比较日期和时间,多此一举
|
s**********o 发帖数: 14359 | 9 只能到月才有好处,到日期的话就不如DATE了,可能会有201513,但这个值应该是算出
来只读的YYYY*100+MM
【在 B*****g 的大作中提到】 : 防止有人存20150229,嘿嘿
|
n****f 发帖数: 905 | 10 我無法回答您的這個問題。 因為有很多我所不了解的技術細節。
比如, 日期的輸入/產生方式, 數值的檢驗等等:
20151318, 或者 1234 等, 請問, 前台的程序, 應該如何檢驗?
用數字來代替日期, 在某一個角度上可以節省資源, 但是, 會在其他方面付出代價。
假如我是這個項目的主管, 我絕不會容許這樣的設計 -- 除非你能說服我整體上權衡
之後, 這是唯一最優化的設計。
【在 s**********o 的大作中提到】 : 只能到月才有好处,到日期的话就不如DATE了,可能会有201513,但这个值应该是算出 : 来只读的YYYY*100+MM
|
|
|
s**********o 发帖数: 14359 | 11 YYYYMM的存法,只用在DATAWARE HOUSE里,不用在OLTP
價。
【在 n****f 的大作中提到】 : 我無法回答您的這個問題。 因為有很多我所不了解的技術細節。 : 比如, 日期的輸入/產生方式, 數值的檢驗等等: : 20151318, 或者 1234 等, 請問, 前台的程序, 應該如何檢驗? : 用數字來代替日期, 在某一個角度上可以節省資源, 但是, 會在其他方面付出代價。 : 假如我是這個項目的主管, 我絕不會容許這樣的設計 -- 除非你能說服我整體上權衡 : 之後, 這是唯一最優化的設計。
|
s**********o 发帖数: 14359 | 12 YYYYMM的存法,只用在DATAWARE HOUSE里,不用在OLTP
好像只在ORACLE里见到
價。
【在 n****f 的大作中提到】 : 我無法回答您的這個問題。 因為有很多我所不了解的技術細節。 : 比如, 日期的輸入/產生方式, 數值的檢驗等等: : 20151318, 或者 1234 等, 請問, 前台的程序, 應該如何檢驗? : 用數字來代替日期, 在某一個角度上可以節省資源, 但是, 會在其他方面付出代價。 : 假如我是這個項目的主管, 我絕不會容許這樣的設計 -- 除非你能說服我整體上權衡 : 之後, 這是唯一最優化的設計。
|
n****f 发帖数: 905 | 13 then how you create these YYYYMM values?
【在 s**********o 的大作中提到】 : YYYYMM的存法,只用在DATAWARE HOUSE里,不用在OLTP : 好像只在ORACLE里见到 : : 價。
|
p********a 发帖数: 5352 | 14 我也觉得日期YYYYMM的NUMERIC值很笨。我是用SAS PASS THRU到ORACLE的,头疼死了 |
p********a 发帖数: 5352 | 15 估计他们是把YEAR 和MONTH拼在一起,然后转成数值
【在 n****f 的大作中提到】 : then how you create these YYYYMM values?
|
n****f 发帖数: 905 | 16 you can convert them to date and insert into the date field:
TO_DATE( 'Your_YYYY' || 'Your_MM', 'YYYYMM')
【在 p********a 的大作中提到】 : 估计他们是把YEAR 和MONTH拼在一起,然后转成数值
|
p********a 发帖数: 5352 | 17 Thanks
【在 n****f 的大作中提到】 : you can convert them to date and insert into the date field: : TO_DATE( 'Your_YYYY' || 'Your_MM', 'YYYYMM')
|