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 驱动程序不支持所需的属性

参考技术A 你的 or and 写的不对
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 6577657657

SQL 存储过程查询以清除日期字段(如果为 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中,查询条件为日期字段的一个时间段,或者日期字段为空,怎么写查询的主要内容,如果未能解决你的问题,请参考以下文章

根据条件在Access的SQL查询中创建日期字段

在sql数据库中如何筛选以日期为条件的记录

sql根据一个字段日期加减7天存入另一字段中

LINQ里如何设置查询条件的日期为昨天或者当天????

sql语句,怎么将一段日期分割成每日?请高人解答。

SQL 存储过程查询以清除日期字段(如果为 NULL)