ASP SQL中,查询条件为日期字段的一个时间段,或者日期字段为空,怎么写查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP SQL中,查询条件为日期字段的一个时间段,或者日期字段为空,怎么写查询相关的知识,希望对你有一定的参考价值。
我是这么写的,无法查询到日期为空时候的记录
sql_design = "Select * From pro_score Where hen is null Or hen Between '"&month_from&"' And '"&month_to&"'And designer like '%"&Sagittarius&"%' Order By hen Desc"
hen是数据表的时间字段,month_from和month_to是,页面选择的一个时间段的两个变量名,Sagittarius是选择是设计人员的变量名
我试过写,isnull(hen)="",或者表里把,hen默认值设为1900-010-01,然后写hen = '#1900-010-01#',报错,ODBC 驱动程序不支持所需的属性
sql_design = "Select * From pro_score Where (hen is null) Or ( Between '"&month_from&"' And '"&month_to& '"&month_to&"'And designer like '%"&Sagittarius&"%' ) Order By hen Desc"追问
还是,报错ODBC 驱动程序不支持所需的属性,不是or 和 and 的问题
参考技术B 第一个问题: select coursename from course where settime between #2000-092.转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好追问你说的,这是什么意思啊?
参考技术C 6577657657SQL 存储过程查询以清除日期字段(如果为 NULL)
【中文标题】SQL 存储过程查询以清除日期字段(如果为 NULL)【英文标题】:SQL stored procedure query to clear date field if NULL 【发布时间】:2018-05-16 14:44:49 【问题描述】:我不是 SQL 专家,但我有一个存储过程查询来将记录插入表中。我的插入查询中有一个选择调用,将 NULL DateTime 字段替换为“”。但由于某种原因,它不起作用。插入后,数据库表中的 DateTime 字段仍为 NULL。有人可以看看下面的查询,让我知道清除 DateTime 字段的选择调用在同一个插入调用中是否有效。
CREATE PROC pCreate_DBQuery
(
@Message varchar(max),
@DateTime smalldatetime
)
AS
BEGIN
INSERT INTO dbo.TestTbl(Message, DateTime)
VALUES (@Message, @DateTime)
SELECT ISNULL(@ProcessedDateTime,'1900-01-01') AS [Changed Processed
Date]
SELECT SCOPE_IDENTITY()
END
这个命令
EXEC pCreate_DBQuery 'None', NULL
插入的表格结果
None, NULL
【问题讨论】:
您不能将''
存储在数据类型为date
(或smalldatetime``datetime2
等)的列中。 ''
不是日期(时间)。这似乎是一个 xy 问题;手头的真正问题是什么?
如果数据类型是 DATETIME 则不能插入 '' 值(引号,空)。
为什么要替换 NULL?这没有意义。
您只能将其替换为有效的SMALLDATETIME
值。喜欢:SELECT ISNULL(@DateTime,'1900-01-01') AS [Changed Date]
编辑:请注意,ISNULL
函数已经用第二个参数替换了空值,REPLACE
是您查询中的多余尝试。
很多事情都错了,听起来像是 XY 问题。为什么你认为你想在你的DateTime
列中存储''
而不是NULL?可能有更好的方法来做你真正想做的事情。
【参考方案1】:
REPLACE
不适用于NULL
。如果你想插入值 19000101
如果值 NULL
被传递,你需要这样做:
INSERT INTO dbo.TestTbl(Message, DateTime)
SELECT @Message, ISNULL(@DateTime,'19000101');
不过,我个人仍然认为NULL
比日期19000101
更好。
如果你想要UPDATE
,那么语法是:
UPDATE dbo.TestTbl
SET DateTime = '19000101'
WHERE DateTime IS NULL;
【讨论】:
INSERT
后面跟着VALUES
,我猜@DateTime 值是他应该放在ISNULL
函数下的值。
好地方@B3S! (我盲目复制 OP 的代码得到了什么;哎呀)。
B3S,'INSERT后跟VALUES'是什么意思,VALUES语句不能跟在INSERT后面,必须在查询之前,否则会导致错误=)必须是像这样 INSERT INTO dbo.TestTbl(Message, DateTime) 后跟 VALUES (@Message, @DateTime) =) 我只想知道这个语句在哪里 SELECT ISNULL(@ProcessedDateTime,'1900-01-01') AS [已更改Processed Date] 将进入存储过程查询,因此如果我决定这样做,表会正确更新/替换字段。
我现在意识到 NULL 是最好的选择,但我只想知道如何更改字段,如果我需要稍后调用存储过程时。
INSERT
语句后面可以跟VALUES
:您应该为将插入表中的每一行指定每一行和每个字段。 INSERT
后面也可以跟 SELECT
语句:在这种情况下,SELECT
的结果集必须包含 INSERT
指定的所有字段,或者,如果未指定,则包含所有表字段。现在假设您想在名为MyTable
的表中UPDATE
一个名为MyDate
的字段:您实际上不需要存储过程来执行此操作。您可以使用这种语法简单地编写更新语句:UPDATE MyTable SET MyDate = ISNULL(MyDate, '1900-01-01')
以上是关于ASP SQL中,查询条件为日期字段的一个时间段,或者日期字段为空,怎么写查询的主要内容,如果未能解决你的问题,请参考以下文章