佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1514|回复: 21

mysql 的问题

[复制链接]
发表于 15-11-2009 09:27 PM | 显示全部楼层 |阅读模式
我想请问一下下面的sql有问题吗?

SELECT complaint_no FROM services
WHERE branch>='1' AND branch<='2' AND date>='01-10-2009' AND date<='01-11-2009'
HAVING complaint_no>='C001' AND complaint_no<='C250'

当我select出来时的complaint_no 他的date会超过我要的date,例如有时会出现大过01-11-2009的如10-11-2009!
回复

使用道具 举报


ADVERTISEMENT

发表于 15-11-2009 09:40 PM | 显示全部楼层
SELECT complaint_no FROM services
WHERE branch>='1' AND branch<='2' AND to_char (date , dd-mm-yyyy) >='01-10-2009' AND to_char (date , dd-mm-yyyy) <='01-11-2009'
HAVING complaint_no>='C001' AND complaint_no<='C250'

希望帮到你 。。。。
回复

使用道具 举报

 楼主| 发表于 15-11-2009 09:53 PM | 显示全部楼层
原帖由 兔仙人 于 15-11-2009 09:40 PM 发表
SELECT complaint_no FROM services
WHERE branch>='1' AND branch='01-10-2009' AND to_char (date , dd-mm-yyyy) ='C001' AND complaint_no



谢谢你,我试试看!
回复

使用道具 举报

 楼主| 发表于 16-11-2009 07:43 PM | 显示全部楼层
还是不能哩,function to_char does not exist!!

要怎样呢?
回复

使用道具 举报

发表于 16-11-2009 08:45 PM | 显示全部楼层
不好意思 , 我 那个 是 ORACLE STATEMENT 来的 。。。

你 可以 试试 用 CAST / CONVERT
回复

使用道具 举报

发表于 16-11-2009 09:18 PM | 显示全部楼层

回复 4# 心影 的帖子

如果是mysql 就用date_format(date,'%d-%m-%Y')
回复

使用道具 举报

Follow Us
 楼主| 发表于 16-11-2009 09:39 PM | 显示全部楼层
原帖由 Legend 于 16-11-2009 09:18 PM 发表
如果是mysql 就用date_format(date,'%d-%m-%Y')


SELECT complaint_no FROM services
WHERE branch>='1' AND branch<='2' AND date_format(date,'%d-%m-%Y')>='01-01-2009' AND date_format(date,'%d-%m-%Y')<='15-01-2009'
HAVING complaint_no>='AS009-003185' AND complaint_no<='AS009-003585'

还是不能哩,没有data出来!
到底是什么问题?
请大家帮帮忙!谢谢
回复

使用道具 举报

发表于 17-11-2009 12:31 PM | 显示全部楼层

回复 7# 心影 的帖子

query因该没问题...可能你的资料不符合吧....直接在mysql run那query也没有data?? show你data来看看...
回复

使用道具 举报


ADVERTISEMENT

发表于 17-11-2009 02:54 PM | 显示全部楼层
SELECT complaint_no FROM services
WHERE branch>='1' AND branch<='2' AND date >='20090101' AND date <='20090115'
HAVING complaint_no>='AS009-003185' AND complaint_no<='AS009-003585'
回复

使用道具 举报

发表于 17-11-2009 04:49 PM | 显示全部楼层
SELECT complaint_no FROM services
WHERE branch>='1' AND branch<='2' AND( date>='01-10-2009' AND date<='01-11-2009' )
HAVING complaint_no>='C001' AND complaint_no<='C250'

问下。。。
你DB里面的date也是01-10-2009 ?

[ 本帖最后由 小陈陈 于 17-11-2009 04:50 PM 编辑 ]
回复

使用道具 举报

发表于 17-11-2009 06:32 PM | 显示全部楼层
前提:
你的table中的field `date` 必须是 date 的 data type。
如果是UNIX 的时间就必须转换成 datetime 的方式,当然可以直接用unix time 来比较。
e.g: FROM_UNIXTIME(`date`,'%Y%m%d')

尝试看看以下代码
  1. SELECT `complaint_no` FROM `services`
  2. WHERE `branch` >= '1' AND `branch` <= '2' AND DATE_FORMAT(`date`,'%Y%m%d') BETWEEN 20090101 AND 20090115
  3. HAVING `complaint_no` >= 'AS009-003185' AND `complaint_no` <= 'AS009-003585'
复制代码

[ 本帖最后由 jinn 于 18-11-2009 11:47 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 17-11-2009 07:46 PM | 显示全部楼层

回复 10# 小陈陈 的帖子/ 回复 9# 10光年的恋爱 的帖子

10光年的恋爱  酱恐怕不能date >='20090101' 因为我是 save 01-10-2009

小陈陈 对我database 也是 01-10-2009
回复

使用道具 举报

发表于 17-11-2009 07:55 PM | 显示全部楼层
SELECT complaint_no FROM services
WHERE branch>='1' AND branch<='2' AND cast (date1 as char[10]) >='01-10-2009' AND cast (date2 as char[10])  <='01-11-2009'
HAVING complaint_no>='C001' AND complaint_no<='C250'

试试这个 。。。。
回复

使用道具 举报

发表于 17-11-2009 07:58 PM | 显示全部楼层
SELECT complaint_no FROM services
WHERE branch>='1' AND branch<='2' AND convert (date1 , char[10]) >='01-10-2009' AND convert (date2 , char[10])  <='01-11-2009'
HAVING complaint_no>='C001' AND complaint_no<='C250'

也试试这个 。

不能就 把那个 error message 写出来 。
回复

使用道具 举报

 楼主| 发表于 17-11-2009 09:20 PM | 显示全部楼层
SELECT complaint_no,date FROM services_complaint
WHERE branch>='HQ' AND branch<='HQ' AND cast (date as char[10])>='01-01-2009' AND cast (date as char[10])<='15-01-2009'
HAVING complaint_no>='AS009-003185' AND complaint_no<='AS009-003185'

这个不能
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'char[10])>='01-01-2009' AND cast (date as char[10])<='15-01-2009'
HAVING complai' at line 2

SELECT complaint_no,date FROM services_complaint
WHERE branch>='HQ' AND branch<='HQ' AND convert (date , char[10]) >='01-01-2009' AND convert (date , char[10])  <='15-01-2009'
HAVING complaint_no>='AS009-003185' AND complaint_no<='AS009-003185'

这个也不能
check the manual that corresponds to your MySQL server version for the right syntax to use near '[10]) >='01-01-2009' AND convert (date , char[10])  <='15-01-2009'
HAVING compla' at line 2


我现在的database是用varchar的!

[ 本帖最后由 心影 于 17-11-2009 09:30 PM 编辑 ]
回复

使用道具 举报

发表于 17-11-2009 10:54 PM | 显示全部楼层
谁教你datetime用varchar的?

之前看过一间company是这样做的。。。
不要告诉我是同一间就好。。
回复

使用道具 举报


ADVERTISEMENT

发表于 17-11-2009 11:46 PM | 显示全部楼层
原帖由 心影 于 15-11-2009 09:27 PM 发表
我想请问一下下面的sql有问题吗?

SELECT complaint_no FROM services
WHERE branch>='1' AND branch='01-10-2009' AND date='C001' AND complaint_no

不知道为何你的statement会有出现大过01-11-2009的record出来,不过切记如果要使用日期的话,尽量使用ISO的格式'YYYY-MM-DD',不然有些系统会阅读'DD-MM-YYYY'成'MM-DD-YYYY'。如果可以转换成UNIX的格式来比较日期是最好的。如果我没记错的话,mysql用的是ISO格式的日期。
回复

使用道具 举报

发表于 18-11-2009 09:44 AM | 显示全部楼层
我用 ORACLE DB 时 , 如果 要 做 BETWEEN - AND , 只要 CAST 去 自己要的 FORMAT ,就可以了 。。。。

MYSQL , 我没有 碰过 。。。。。


to_date(date, 'dd-mm-yyyy)   试试

[ 本帖最后由 兔仙人 于 18-11-2009 09:46 AM 编辑 ]
回复

使用道具 举报

发表于 18-11-2009 11:09 AM | 显示全部楼层

回复 15# 心影 的帖子

OMG...ZZZ...干嘛data type用varchar??  你save成,yyyy-mm-dd,可能compare得到...dd-mm-yyyy简直compare不到....
varchar 01-01-2009 是小过 02-01-2008
datetime 01-01-2009 是大过 02-01-2008
看到分别??
1. 你save成yyyy-mm-dd的format... select时cast(yyyy-mm-dd as date)
                               或
2. 换datatype...把资料改完他...

[ 本帖最后由 Legend 于 18-11-2009 12:25 PM 编辑 ]
回复

使用道具 举报

发表于 18-11-2009 11:58 AM | 显示全部楼层
想问下,你的date compare有问题是不是你用错date的方法? Legend说的或许就是你面对的问题。
The DATE type is used when you need only a date value, without a time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.
  1. SELECT `complaint_no` FROM `services`
  2. WHERE `branch` >= '1' AND `branch` <= '2' AND date>='2009-10-01' AND date<='2009-11-01'
  3. HAVING `complaint_no` >= 'AS009-003185' AND `complaint_no` <= 'AS009-003585'
复制代码
你试试看把你自己原本的
date>='01-10-2009' AND date<='01-11-2009'
改成
date>='2009-10-01' AND date<='2009-11-01'

[ 本帖最后由 jinn 于 18-11-2009 12:01 PM 编辑 ]
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 3-12-2025 11:58 AM , Processed in 0.165623 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表