|
查看: 1515|回复: 21
|
mysql 的问题
[复制链接]
|
|
|
我想请问一下下面的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! |
|
|
|
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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') |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 16-11-2009 09:39 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 17-11-2009 12:31 PM
|
显示全部楼层
回复 7# 心影 的帖子
|
query因该没问题...可能你的资料不符合吧....直接在mysql run那query也没有data?? show你data来看看... |
|
|
|
|
|
|
|
|
|
|
发表于 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')
尝试看看以下代码- SELECT `complaint_no` FROM `services`
- WHERE `branch` >= '1' AND `branch` <= '2' AND DATE_FORMAT(`date`,'%Y%m%d') BETWEEN 20090101 AND 20090115
- 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是这样做的。。。
不要告诉我是同一间就好。。 |
|
|
|
|
|
|
|
|
|
|
发表于 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'. - SELECT `complaint_no` FROM `services`
- WHERE `branch` >= '1' AND `branch` <= '2' AND date>='2009-10-01' AND date<='2009-11-01'
- 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 编辑 ] |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|