标题:从字符串转换为 datetime 时发生语法错误。
取消只看楼主
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
结帖率:100%
 问题点数:0 回复次数:14 
从字符串转换为 datetime 时发生语法错误。
做的一个订单查询系统,从日期查询订单,用的是ASP+SQL.
从"日期-日期"查询,就是从时间段查询.
在表单里有两个"INPUT",一个是PurBD,一个是PurBd2.
所用语句是:
StrSQL=StrSQL+"and dBillDay between '%"+Request.Form("PurBd")+"%' and '%"+Request.Form("PurBd2")+"%'"
SQL数据库中类型为DATATIME,长度为8.
查询时出错:
错误类型:
Microsoft OLE DB Provider for SQL Server (0x80040E07)
从字符串转换为 datetime 时发生语法错误。
/pur_list.asp, 第 56 行

POST Data:
PurBn=&PurBd=2007-01&PurBd2=2007-01&PurBrd=&PurUp=%B2%E9%D1%AF

用SQL查询分析器查询时,
格式是
2007-01-01 00:00:00.000     
上网查的都和我的不同.为什么呢?
搜索更多相关主题的帖子: datetime 语法 字符 
2008-07-17 11:56
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
查了一下,FORMAT DATATIME是吗?
FormatDateTime 函数
返回表达式,此表达式已被格式化为日期或时间。

FormatDateTime(Date[, NamedFormat])

参数
Date

必选项。要被格式化的日期表达式。

NamedFormat

可选项。指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate。

设置
NamedFormat 参数可以有以下值:

常数 值 描述
vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分。  
vbLongDate 1 使用计算机区域设置中指定的长日期格式显示日期。
vbShortDate 2 使用计算机区域设置中指定的短日期格式显示日期。
vbLongTime 3 使用计算机区域设置中指定的时间格式显示时间。
vbShortTime 4 使用 24 小时格式 (hh:mm) 显示时间。


说明
下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime:

 Function GetCurrentDate
  'FormatDateTime 把日期型格式化为长日期型。
  GetCurrentDate = FormatDateTime(Date, 1)
End Function

但是我还是不太明白.....
2008-07-17 15:11
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
[bo][un]dhdhzzw[/un] 在 2008-7-17 15:31 的发言:[/bo]

顺便说一下,asp里'%"+Request.Form("PurBd")+"%'和'%"&Request.Form("PurBd")&"%'的区别在哪里?

我当然不知道啦........
我只知道他们都是变量......
相信这个你也知道啦~
哈哈
2008-07-17 16:33
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
试了一天多,还是出现错,我已经用了FORMAT........
代码如下 :
<%
Function genSQLstr()
    Dim sId,PurBd,PurBd2
    sId=session("sId")
    PurBd= FormatDateTime(Date, 1)
    PurBd2= FormatDateTime(Date, 1)
    if Request.Form("PurBn")<>"" then
    StrSQL=StrSQL+"where sBillNo like '%"+Request.Form("PurBn")+"%'"
    else
    StrSQL=StrSQL+"where sSuppId='"& sId &"'"
    end if
    if Request.Form("PurBd")<>"" and Request.Form("PurBd2")<>"" then
    StrSQL=StrSQL+"and dBillDay between '%"+Request.Form("PurBd")+"%' and '%"+Request.Form("PurBd2")+"%'"
    end if
   
    if Request.Form("PurBrd")<>"" then
    StrSQL=StrSQL+"and dRecDate = '%"+Request.Form("PurBd")+"%'"
    end if

    ' 只获取到自己的订单
    strSQL=strSQL & " and sSuppId='" & Replace(sId,"'","''") & "'" ' 防止注入攻击
2008-07-19 08:28
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
假如上面的:
PurBd= FormatDateTime(Date, 1)
PurBd2= FormatDateTime(Date, 1)
改为:
Request.Form("PurBn")= FormatDateTime(Date, 1)
Request.Form("PurBd2")= FormatDateTime(Date, 1)
就会提示:
错误类型:
Microsoft VBScript 运行时错误 (0x800A01B6)
对象不支持此属性或方法: 'Request.Form'
2008-07-19 08:32
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
而如果定义为变量再引用,也不行:如下代码:!!
<%
Function genSQLstr()
    Dim sId,PurBdd,PurBdd2
    sId=session("sId")
    PurBdd=Request.Form("PurBd")
    PurBdd= FormatDateTime(Date, 1)
    PurBdd2=Request.Form("PurBd2")
    PurBdd2= FormatDateTime(Date, 1)
    if Request.Form("PurBn")<>"" then
    StrSQL=StrSQL+"where sBillNo like '%"+Request.Form("PurBn")+"%'"
    else
    StrSQL=StrSQL+"where sSuppId='"& sId &"'"
    end if
    if Request.Form("PurBd")<>"" and Request.Form("PurBd2")<>"" then
    StrSQL=StrSQL+"and dBillDay between 'Purdd' and 'Purdd2'"
    end if
   
    if Request.Form("PurBrd")<>"" then
    StrSQL=StrSQL+"and dRecDate = '%"+Request.Form("PurBrd")+"%'"
    end if

    ' 只获取到自己的订单
    strSQL=strSQL & " and sSuppId='" & Replace(sId,"'","''") & "'" ' 防止注入攻击
End function
%>
错误类型:
Microsoft OLE DB Provider for SQL Server (0x80040E07)
从字符串转换为 datetime 时发生语法错误。
/pur_list.asp, 第 60 行
2008-07-19 08:40
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
时至今日,BETWEEN还是用不出来。。。。。。。
2008-07-22 08:11
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
假如我的时间字段是dBillDay,那么就要Format(dBillDay,"yyyy-M-d")么?
那么假如是我要取表单中的数据来代入SQL语句,
那么应该是先DIM了日期,然后再FORMAT,最后在ASP中的SQL语句中调用吗?
2008-07-22 10:09
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
但是我在上面试了几个都不行啊。。。。。
2008-07-22 10:18
月夜NO风
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-6-29
得分:0 
[bo][un]yms123[/un] 在 2008-7-22 10:19 的发言:[/bo]

日期时间好像不支持模糊查询的

现在我想要日期到日期查询,就是查询具体日期到具体日期!
应该是用BETWEEN吧?但是我做程序的时候说
从字符串转换为 datetime 时发生语法错误。
而SQL数据库中的字段类型是DATATIME,长度是8,应该是长日期吧?

[[it] 本帖最后由 月夜NO风 于 2008-7-22 11:10 编辑 [/it]]
2008-07-22 11:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-224152-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.199708 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved