Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用;及;及;或;在“a”中;其中;条款_Sql_Where Clause - Fatal编程技术网

Sql 如何使用;及;及;或;在“a”中;其中;条款

Sql 如何使用;及;及;或;在“a”中;其中;条款,sql,where-clause,Sql,Where Clause,我有一个查询,它根据一组条件收集信息。基本上我想知道一个地方是否支付了超过50美元的一天,或者评论部分有“过滤器”这个词 我的问题是: SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number FROM Paid_Out_Tb WHERE (Store_Id = 1929) AND (Paid_Out_Da

我有一个查询,它根据一组条件收集信息。基本上我想知道一个地方是否支付了超过50美元的一天,或者评论部分有“过滤器”这个词

我的问题是:

SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE        (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 50) OR
                         (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
选择店铺Id、已付金额、已付注释、已付日期时间、更新用户名、直到号码
来自付费的
其中(Store_Id=1929)和(Paid_Out_Datetime>=DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0))和(Paid_Out_Datetime50)或
(已支付的注释,如N“%”+“过滤器”+“%”)

问题是它返回460个结果,应该只返回2个。

优先于
。如果要控制优先级,需要将条件分组。试试这个:

SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE        (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                     GETDATE()), 0)) AND ( (Paid_Out_Amount > 50) OR
                     (Paid_Out_Comment LIKE N'%' + 'Filter' + '%') )
选择店铺Id、已付金额、已付注释、已付日期时间、更新用户名、直到号码
来自付费的
其中(Store_Id=1929)和(Paid_Out_Datetime>=DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0))和(Paid_Out_Datetime50)或
(已支付的注释,如N“%”过滤器“+”%”)

您需要将where子句的第一部分(直到'OR')放在括号内

(
 (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 50)

) OR (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
(
(Store_Id=1929)和(Paid_Out_Datetime>=DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0))和(Paid_Out_Datetime50)
)或(已支付的注释,如N“%”+“过滤器”+“%”)

尝试以下查询:

SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE       ((Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 50)) OR
                         (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
选择店铺Id、已付金额、已付注释、已付日期时间、更新用户名、直到号码
来自付费的
其中((Store_Id=1929)和(Paid_Out_Datetime>=DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0))和(Paid_Out_Datetime50))或
(已支付的注释,如N“%”+“过滤器”+“%”)

您需要将已付款金额和已付款注释标准用第二组括号括起来:

SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, 
    Update_UserName, Till_Number 
FROM Paid_Out_Tb 
WHERE (Store_Id = 1929) AND (Paid_Out_Datetime >= 
    DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND 
    (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) AND 
    (
        (Paid_Out_Amount > 50) OR (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
    )
选择门店Id、已付金额、已付注释、已付日期时间、,
更新\u用户名,直到\u号码
来自付费的
其中(门店Id=1929)和(付款日期时间>=
DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0))和
(付讫日期时间50)或(已付注释,如N“%”+“过滤器”+“%”)
)

看起来您缺少一组括号:

SELECT        
    Store_Id
    , Paid_Out_Amount
    , Paid_Out_Comment
    , Paid_Out_Datetime
    , Update_UserName
    , Till_Number
FROM            
    Paid_Out_Tb
WHERE        
    Store_Id = 1929
    AND Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)
    AND Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
    AND
    (
        Paid_Out_Amount > 50
        OR
        LOWER(Paid_Out_Comment) LIKE '%filter%'
    )
选择
商店标识
,已支付金额
,发表评论
,付款日期时间
,更新您的用户名
,直到你的号码
从…起
已付
哪里
商店Id=1929
和Paid_Out_Datetime>=DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0)
支付日期时间50
或
降低(已支付的注释),如“%filter%”
)
您还需要查看LIKE命令-更新代码以将注释全部设置为小写并搜索单词过滤器


另外,还可以查看付费日期时间检查的BETWEEN命令,这实际上取决于您使用OR的目的。您已支付的金额大于50或支付的金额类似于N%Filter%。给你的条款加上一些括号

WHERE 
(
    (1 = 1)
    AND
    (2 = 2)
)
OR
( 3 = 3 )
选择店铺Id、已付金额、已付注释、已付日期时间、更新用户名、直到号码
来自付费的
其中(Store_Id=1929)和(Paid_Out_Datetime>=DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0))和(Paid_Out_Datetime20)或
(Store_Id=1929)和(Paid_Out_Datetime>=DATEADD(day,DATEDIFF(day,0,GETDATE())-1,0))和(Paid_Out_Datetime

我结合了你的一些建议,得出了上述结论。这很有效。谢谢

不要将between用作datetime。中间是包容的,所以你必须做一些棘手的事情,只有得到一天你正在寻找。看一看。正如这个答案所暗示的,使用AND和OR组合而不带括号可能会令人困惑。和的优先级高于或,因此需要使用括号来显示OR语句所考虑的部分。请参阅此处的另一个相关问题:。
SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE        (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 20) OR
                         (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')