請教一下下面的sql 語句哪裡有問題了,時間字段轉化為string 后等於號沒有作用

莫鸣 2017-03-17 10:38:21
1.這個是時間convert 為varchar(10):
where CONVERT(varchar(10),A.MEA_DATETIME)+CONVERT(varchar(10),A.END_TIME)>=:B ANDCONVERT(varchar(10),A.MEA_DATETIME)+CONVERT(varchar(10),A.END_TIME)<=:C ';

2.這個是時間字段convert 為datetime :
where  CONVERT(DATETIME,A.MEA_DATETIME)+CONVERT(DATETIME,A.END_TIME)>=:B AND CONVERT(DATETIME,A.MEA_DATETIME)+CONVERT(DATETIME,A.END_TIME)<=:C   


同樣的兩句,但是第一句的那個就不能能查詢到當日的。即“”=“” 不起作用。請問是為什麼呢?
...全文
541 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2017-03-17
  • 打赏
  • 举报
回复
引用 12 楼 diaodiaosky 的回复:
 CONVERT(DATETIME,A.MEA_DATETIME)+CONVERT(DATETIME,A.END_TIME)>=:B AND CONVERT(DATETIME,A.MEA_DATETIME)+CONVERT(DATETIME,A.END_TIME)<=:C  '
用這樣子報錯。字符串轉時間有問題。
报错是很正常的,认真看上面回复 日期格式要指定格式,直接转字符再加减字符串的,你可看看生成效果是否满足格式 参照格式是否满足日期格式


SELECT CONVERT(VARCHAR(10),GETDATE())+'09:00'--不满足日期格式
/*
(无列名)
03 17 201709:00
*/
--转换时报错
SELECT CAST(CONVERT(VARCHAR(10),GETDATE())+'09:00' AS DATETIME)

--成功例子

SELECT CAST(CONVERT(VARCHAR(11),GETDATE(),120)+'09:00' AS DATETIME)
莫鸣 2017-03-17
  • 打赏
  • 举报
回复
 CONVERT(DATETIME,A.MEA_DATETIME)+CONVERT(DATETIME,A.END_TIME)>=:B AND CONVERT(DATETIME,A.MEA_DATETIME)+CONVERT(DATETIME,A.END_TIME)<=:C  '
用這樣子報錯。字符串轉時間有問題。
莫鸣 2017-03-17
  • 打赏
  • 举报
回复
引用 10 楼 Haiwer 的回复:
这样除了好理解容易写以外,性能能得到保证
謝謝,我知道是應該直接使用時間比較好。但是系統裡面的存儲是字符串,不好修改字段類型。要改動的地方太多了。
昵称被占用了 2017-03-17
  • 打赏
  • 举报
回复
这样除了好理解容易写以外,性能能得到保证
昵称被占用了 2017-03-17
  • 打赏
  • 举报
回复
日期时间字段,一般删选不应该转化成字符串比较,而是直接用>、<、>=、<=或者between比较 比如查一天的数据 where Dt>= '2017-03-17' and Dt <'2017-03-18' 或者 where Dt>= '2017-03-17' and Dt <dateadd(day,1,'2017-03-17') 其他的类推
莫鸣 2017-03-17
  • 打赏
  • 举报
回复
引用 7 楼 wmxcn2000 的回复:
[quote=引用 5 楼 diaodiaosky 的回复:]


我選擇的條件中有選擇當日的時間呢?不能直接限制最大的時間了。


參考3樓的說法,使用不同的轉換格式

120 或者 20	yyyy-mm-dd hh:mi:ss(24h)
[/quote]

 SELECT TOP 1  CONVERT(varchar(10),A.MEA_DATETIME)+CONVERT(varchar(10),A.END_TIME),*
FROM IPQC_MEASURING_H A

SELECT TOP 1 CONVERT(varchar(10),A.MEA_DATETIME,120)+CONVERT(varchar(10),A.END_TIME,120),*
FROM IPQC_MEASURING_H A


我用這個語句,查詢得到的結果好像是一樣的。
卖水果的net 2017-03-17
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaosky 的回复:
我選擇的條件中有選擇當日的時間呢?不能直接限制最大的時間了。
參考3樓的說法,使用不同的轉換格式
120 或者 20	yyyy-mm-dd hh:mi:ss(24h)
莫鸣 2017-03-17
  • 打赏
  • 举报
回复

 if r1.Checked then
 begin
   sqls :='select a.*,isnull(b.g_r3,'''')+ '' '' + isnull(b.p_r3,'''')+'' ''+isnull(b.I_r3,'''') as aod,convert(int,b.qty) as qty,b.*,ado_aod= case (isnull(b.g_r3,'''')+ '''' + isnull(b.p_r3,'''')+''''+isnull(b.I_r3,''''))'+
               ' when '''' then '''' else ''AOD'' end,convert (varchar(10),a.mea_datetime)+'' ''+convert(varchar(10),a.start_time )as time ,copy_max_no   ,B.* from IPQC_MEASURING_H  AS A with(nolock) inner join IPQC_MEASURING_DD AS  B with(nolock)  '+
              ' on A.max_no=B.max_no '+
              ' where CONVERT(varchar(10),A.MEA_DATETIME,120)+CONVERT(varchar(10),A.END_TIME,120)>=:B AND CONVERT(varchar(10),A.MEA_DATETIME,120)+CONVERT(varchar(10),A.END_TIME,120)<=:C ';


    if trim(edit3.Text)<>'' then
   BEGIN
   sqls :=sqls+' and  a.cust_part_id=:G ';
   END;
   if trim(edit7.Text)<>'' then
   BEGIN
   sqls := sqls+' and   A.ijo_no LIKE :A ';
   END;
   if trim(edit5.Text)<>'' then
   BEGIN
   sqls := sqls+ ' and a.maching_no=:M ';
   END;


   sqls := sqls +' order by a.Create_Date desc ';
     ShowMessage(sqls);
   // ShowMessage(formatdatetime('yyyy-mm-dd hh:mm:ss',dxdateedit1.Date + dxtimeedit1.Time));
   // ShowMessage(formatdatetime('yyyy-mm-dd hh:mm:ss',dxdateedit2.Date + dxtimeedit2.Time));
  WITH IPQC_MEASURING_H DO
  BEGIN
      close;
      sql.Clear;
      sql.Add(sqls);
      parameters.ParamByName('B').Value := formatdatetime('yyyy-mm-dd hh:mm:ss',dxdateedit1.Date + dxtimeedit1.Time);
      parameters.ParamByName('c').Value :=  formatdatetime('yyyy-mm-dd hh:mm:ss',dxdateedit2.Date + dxtimeedit2.Time);
       if trim(edit7.Text)<>'' then
      parameters.ParamByName('A').Value := trim(edit7.Text)+'%';
       if trim(edit5.Text)<>'' then
       parameters.ParamByName('M').Value := trim(edit5.Text);
       if trim(edit3.Text)<>'' then
       parameters.ParamByName('G').Value := trim(edit3.Text);
      open();
     label2.Caption := '癘魁计 '+inttostr(IPQC_MEASURING_H.RecordCount) +' 兵';
  END;
有一個選擇查詢條件的,需要選擇日期和時間段的。
莫鸣 2017-03-17
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
CONVERT(varchar(10),A.MEA_DATETIME) 相當于 當天的零點零分,所以不包含當天的數據,建議在這個基礎上,再加上 23:59:59 ;
我選擇的條件中有選擇當日的時間呢?不能直接限制最大的時間了。 delph 的代碼為:

  WITH IPQC_MEASURING_H DO
  BEGIN
      close;
      sql.Clear;
      sql.Add(sqls);
      parameters.ParamByName('B').Value := formatdatetime('yyyy-mm-dd hh:mm:ss',dxdateedit1.Date + dxtimeedit1.Time);
      parameters.ParamByName('c').Value :=  formatdatetime('yyyy-mm-dd hh:mm:ss',dxdateedit2.Date + dxtimeedit2.Time);
       if trim(edit7.Text)<>'' then
      parameters.ParamByName('A').Value := trim(edit7.Text)+'%';
       if trim(edit5.Text)<>'' then
       parameters.ParamByName('M').Value := trim(edit5.Text);
       if trim(edit3.Text)<>'' then
       parameters.ParamByName('G').Value := trim(edit3.Text);
莫鸣 2017-03-17
  • 打赏
  • 举报
回复
where CONVERT(varchar(10),A.MEA_DATETIME,120)+CONVERT(varchar(10),A.END_TIME,120)>=:B AND CONVERT(varchar(10),A.MEA_DATETIME,120)+CONVERT(varchar(10),A.END_TIME,120)<=:C ';
修改為這樣也不行。還是需要選擇大一天才行。
中国风 2017-03-17
  • 打赏
  • 举报
回复
日期参数用字符串,日期条件用范围或转字符 如:
SELECT CONVERT(VARCHAR(10),GETDATE(),120)
中国风 2017-03-17
  • 打赏
  • 举报
回复
CONVERT(varchar(10),A.END_TIME,120)--日期转换需要指定显示格式代码,如:120
卖水果的net 2017-03-17
  • 打赏
  • 举报
回复
CONVERT(varchar(10),A.MEA_DATETIME) 相當于 當天的零點零分,所以不包含當天的數據,建議在這個基礎上,再加上 23:59:59 ;
Tiger_Zhao 2017-03-17
  • 打赏
  • 举报
回复
[Quote=引用 # 楼 user 的回复:]
CONVERT(DATETIME,A.MEA_DATETIME)+CONVERT(DATETIME,A.END_TIME)>=:B


用這樣子報錯。字符串轉時間有問題。[/Quote]
既然你说字段是字符串,假定是 A.MEA_DATETIME = '2017-03-17'、A.END_TIME = '12:00' 这样的格式,要用 style 参数指定格式
CONVERT(DATETIME,A.MEA_DATETIME,120)+CONVERT(DATETIME,A.END_TIME,114)>=:B

还有最好在参数中显式使用日期类型
parameters.ParamByName('B').Value := dxdateedit1.Date + dxtimeedit1.Time;
parameters.ParamByName('B').DataType := ftDateTime;

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧