由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - Need help with an oracle SQL expression
相关主题
A question of filling in missing value in SQLSenior Teradata DBA wanted
Oracle 求助Create tablespace using dbconsole in Oracle 11g
Oracle DBA or MS SQL DBA? Which career path to choose?如何在Unbuntu下启动oracle
SQL SERVER没人学啊有没有人找Oracle DBA工作
猪一样的队友考虑转行了
SQL SERVER背景, 考哪个认证好?Oracle DBA position at Austin TX
做Oracle DBA很难吗?help! A bug about date type !
coolbid, 问个问题embedded sql 问题
相关话题的讨论汇总
话题: yyyymm话题: date话题: ym1话题: char话题: dob
进入Database版参与讨论
1 (共1页)
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

相关主题
SQL SERVER背景, 考哪个认证好?Senior Teradata DBA wanted
做Oracle DBA很难吗?Create tablespace using dbconsole in Oracle 11g
coolbid, 问个问题如何在Unbuntu下启动oracle
进入Database版参与讨论
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')

1 (共1页)
进入Database版参与讨论
相关主题
embedded sql 问题猪一样的队友
Oracle 看来还有很长的路SQL SERVER背景, 考哪个认证好?
oracle across wan做Oracle DBA很难吗?
PostgreSQL?coolbid, 问个问题
A question of filling in missing value in SQLSenior Teradata DBA wanted
Oracle 求助Create tablespace using dbconsole in Oracle 11g
Oracle DBA or MS SQL DBA? Which career path to choose?如何在Unbuntu下启动oracle
SQL SERVER没人学啊有没有人找Oracle DBA工作
相关话题的讨论汇总
话题: yyyymm话题: date话题: ym1话题: char话题: dob