免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2957 | 回复: 9
打印 上一主题 下一主题

[求助] SQL语句,SQL新手,郁闷了,大家判断下是什么问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-27 21:16 |只看该作者 |倒序浏览
SQL> select last_name , job_id, hire_date
  2  from employees;

LAST_NAME            JOB_ID               HIRE_DATE
-------------------- -------------------- -----------
King                 AD-PRES              17-JUL-87
Kochhar              AD-VP                21-SEP-89
De Haan              AD-VP                13-JAN-93
Hunold               IT-PROG              03-JAN-90
Ennst                IT-PROG              21-MAY-91
Lorentz              IT-PROG              07-FEB-99
Mourgos              ST-MAN               15-NOV-99
Rajs                 ST-CLERK             17-OCT-95
Davies               ST-CLERK             29-JAN-97
Matos                ST-CLERK             15-MAR-98
Vargas               ST-CLERK             09-JUL-98
Zlotkev              SA_MAN               29-JAN-00

已选择12行。

SQL> select last_name , job_id, hire_date
  2  from employees
  3  where hire_date >= to_date('20-02-90','dd-mm-rr');

LAST_NAME            JOB_ID               HIRE_DATE
-------------------- -------------------- ------------
King                 AD-PRES              17-JUL-87
Kochhar              AD-VP                21-SEP-89
De Haan              AD-VP                13-JAN-93
Hunold               IT-PROG              03-JAN-90
Ennst                IT-PROG              21-MAY-91
Lorentz              IT-PROG              07-FEB-99
Mourgos              ST-MAN               15-NOV-99
Rajs                 ST-CLERK             17-OCT-95
Davies               ST-CLERK             29-JAN-97
Matos                ST-CLERK             15-MAR-98
Vargas               ST-CLERK             09-JUL-98
Zlotkev              SA_MAN               29-JAN-00

已选择12行。

SQL> select last_name , job_id, hire_date
  2  from employees
  3  where hire_date BETWEEN  to_date('20-02-90','dd-mm-rr') AND  to_date('01-04-98','dd-mm-rr');

未选定行

大家看出问题来了吗?
我的SQL语句关于时间的比较无效果。大家给看看,到底咋回事?

论坛徽章:
0
2 [报告]
发表于 2014-07-27 21:17 |只看该作者
SQL> select last_name , job_id, hire_date
  2      from employees
  3      where hire_date >= to_date('20-02-1990','dd-mm-yyyy');

LAST_NAME            JOB_ID               HIRE_DATE
-------------------- -------------------- ------------
King                 AD-PRES              17-JUL-87
Kochhar              AD-VP                21-SEP-89
De Haan              AD-VP                13-JAN-93
Hunold               IT-PROG              03-JAN-90
Ennst                IT-PROG              21-MAY-91
Lorentz              IT-PROG              07-FEB-99
Mourgos              ST-MAN               15-NOV-99
Rajs                 ST-CLERK             17-OCT-95
Davies               ST-CLERK             29-JAN-97
Matos                ST-CLERK             15-MAR-98
Vargas               ST-CLERK             09-JUL-98
Zlotkev              SA_MAN               29-JAN-00

已选择12行。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
3 [报告]
发表于 2014-07-28 10:01 |只看该作者
你得看一下你的表结构, 如果你 hire_date是varchar字段, 这样比较可能不会有结果吧?

我没用过 oracle, 但我不认为默认的date表示是这样的形式. 这相当于 dd-mmm-yy

论坛徽章:
17
天蝎座
日期:2014-03-10 14:35:04数据库技术版块每日发帖之星
日期:2015-12-13 06:20:00IT运维版块每日发帖之星
日期:2015-12-13 06:20:00数据库技术版块每日发帖之星
日期:2015-10-20 06:20:00数据库技术版块每日发帖之星
日期:2015-08-21 06:20:00数据库技术版块每日发帖之星
日期:2015-06-17 22:20:002015年迎新春徽章
日期:2015-03-04 09:57:092015年辞旧岁徽章
日期:2015-03-03 16:54:15技术图书徽章
日期:2015-01-12 17:05:35亥猪
日期:2014-11-09 13:05:04金牛座
日期:2014-09-25 11:28:54处女座
日期:2014-09-15 19:58:36
4 [报告]
发表于 2014-07-28 11:45 |只看该作者
select last_name , job_id, hire_date
    from employees
   where hire_date BETWEEN   '20-FEB-90'  AND  '20-APR-90';

论坛徽章:
0
5 [报告]
发表于 2014-07-29 16:37 |只看该作者
select to_char(hire_date,'YYYY') from employees;
检查一下hire_date的数据是否有问题。

论坛徽章:
5
天蝎座
日期:2014-01-23 12:27:392015亚冠之德黑兰石油
日期:2015-05-14 13:33:042015年亚洲杯之乌兹别克斯坦
日期:2015-03-06 14:10:38天秤座
日期:2014-01-24 15:03:052015亚冠之德黑兰石油
日期:2015-08-27 13:43:58
6 [报告]
发表于 2014-07-29 17:42 |只看该作者
回复 2# wzz0001


   这个结果本身就是错的。
  HIRE_DATE的类型不匹配,或者格式不匹配。

论坛徽章:
0
7 [报告]
发表于 2014-07-30 10:05 |只看该作者
我检查了下,确实是hire_date本身数据有问题,不好意思

SQL> select last_name,hire_date from employees;

LAST_NAME            HIRE_DATE
-------------------- ------------
King                 17-JUL-87
Kochhar              21-SEP-89
De Haan              13-JAN-93
Hunold               03-JAN-90
Ennst                21-MAY-91
Lorentz              07-FEB-99
Mourgos              15-NOV-99
Rajs                 17-OCT-95
Davies               29-JAN-97
Matos                15-MAR-98
Vargas               09-JUL-98

SQL> select last_name,to_char(hire_date,'dd-mm-yyyy') from employees;

LAST_NAME            TO_CHAR(HIRE_DATE,'D
-------------------- --------------------
King                 17-07-2087
Kochhar              21-09-2089
De Haan              13-01-2093
Hunold               03-01-2090
Ennst                21-05-2091
Lorentz              07-02-2099
Mourgos              15-11-2099
Rajs                 17-10-2095
Davies               29-01-2097
Matos                15-03-2098
Vargas               09-07-2098

我在网上找了条命令,已经修复
update employees set
hire_date =
        to_date( '19' || substr(to_char(hire_date,'yyyymmdd'),3,2)
                     || substr(to_char(hire_date,'yyyymmdd'),5,4),
                                    'yyyy-mm-dd')
where substr(to_char(hire_date,'yyyymmdd'),1,4) like '20%';



SQL> select last_name,to_char(hire_date,'dd-mm-yyyy') from employees;

LAST_NAME            TO_CHAR(HIRE_DATE,'D
-------------------- --------------------
King                 17-07-1987
Kochhar              21-09-1989
De Haan              13-01-1993
Hunold               03-01-1990
Ennst                21-05-1991
Lorentz              07-02-1999
Mourgos              15-11-1999
Rajs                 17-10-1995
Davies               29-01-1997
Matos                15-03-1998
Vargas               09-07-1998

论坛徽章:
0
8 [报告]
发表于 2014-07-30 10:10 |只看该作者
应该是在插入时出的问题
insert语句使用了to_date('10-APR-92','DD-MON-YY')

我自己也做了测试
SQL> select to_char(to_date('10-APR-92','DD-MON-YY'),'dd-mm-yyyy') from dual;

TO_CHAR(TO_DATE('10-
--------------------
10-04-2092

SQL> select to_char(to_date('10-APR-92','DD-MON-RR'),'dd-mm-yyyy') from dual;

TO_CHAR(TO_DATE('10-
--------------------
10-04-1992

论坛徽章:
7
天蝎座
日期:2013-08-16 23:19:32丑牛
日期:2014-01-08 09:20:14寅虎
日期:2014-01-11 11:03:44午马
日期:2014-04-28 11:02:40天秤座
日期:2014-05-16 23:24:24摩羯座
日期:2014-07-20 10:46:04卯兔
日期:2014-08-08 15:21:41
9 [报告]
发表于 2014-07-31 09:35 |只看该作者
就是一个格式转换问题

论坛徽章:
0
10 [报告]
发表于 2014-08-21 15:57 |只看该作者
select last_name , job_id, hire_date from employees where to_date(hire_date,'dd-mm-yy')>to_date('20-02-90','dd-mm-yy')
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP