T-SQL中的DATE类型变量的LIKE运算符

时间:2019-02-22 05:57:39

标签: mysql sql tsql

我要运行这样的条件:

SELECT COUNT(*) FROM table WHERE date_time LIKE '2019-02-02';

我试图将其转换为T-SQL,如下所示:

SELECT COUNT(*) FROM table WHERE date_time LIKE [dynamicDateVariable];

这将导致该日期有多少行?

现在,我尝试将其放入 IF 语句中,如下所示:

IF (SELECT COUNT(*) FROM funnel_logs 
    WHERE date_time LIKE converted_date) = '1' THEN
    //... run code
ELSE
    //... run this code
END IF;

我的目标是仅将一(1)行计数分配给 运行代码 ,但是问题是即使我在该日期有一(1)行计数仍然会执行 ELSE 语句并运行 运行此代码

注意:我正在使用xampp和phpmyadmin来运行此程序,并且正在触发器上运行此过程。我尝试使用CONVERT(VARCHAR, [dynamicDateVariable], 126) LIKE [dynamicDateVariable],但仍然无法正常工作。也有一个DATEPART(),但有人说这并不是很重要,我认为拥有[dynamicDateVariable]将会处理太多的工作。

我想念什么吗?我是T-SQL的新手,所以如果有人可以提供帮助,将不胜感激。

4 个答案:

答案 0 :(得分:2)

原因是您无法以这种方式对LIKE执行DateTime运算符,因此您必须考虑解决方法。

  • 将您的converted_date日期分为年,月和日(您的日期) 想要对LIKE执行)
  • 使用DatePart函数获取单独的年,月和日,然后 执行比较。

以下是我在SqlServer上测试过的代码:

declare @var int 
set @var = (SELECT 
                  COUNT(*) FROM t  
            WHERE --ddate LIKE '2019-02-22%')
                 (DATEPART(yy, ddate) = 2019) AND
                  DATEPART(mm, ddate) = 02 AND
                  DATEPART(dd, ddate) = 22)
IF (@var = 1) 
begin
    select 1
end
ELSE
begin
    select 2
END 

答案 1 :(得分:1)

在T-SQL中,LIKE运算符仅适用于字符串数据类型。

来自official documentation

  

确定特定的字符串是否与指定的模式匹配。

随后:

  

参数
   match_expression
  是 character 数据类型的任何有效表达式。

搜索记录的最佳实践,其中datetime / datetime2列具有特定日期(无时间)的情况是将>=用作请求的日期,将<=用作一个日期次日:

DECLARE @SearchDate Date = '2019-02-22';

SELECT Columns
FROM Table
WHERE DateTimeColumn >= @SearchDate
AND DateTimeColumn <= DATEADD(DAY, 1, @SearchDate)

您可以用相同的方式搜索不同的范围-例如,如果要搜索特定的月份,请将日期设置为该月的第一天,而不是添加一天,而是添加一个月份:

DECLARE @SearchDate Date = '2019-02-01';

SELECT Columns
FROM Table
WHERE DateTimeColumn >= @SearchDate
AND DateTimeColumn <= DATEADD(MONTH, 1, @SearchDate)

答案 2 :(得分:0)

您的SQL脚本不起作用,因为您要比较整数与字符串。 即1 ='1' 将“ 1”更改为1,如下所示:

如果从funnel_logs中选择COUNT(*)个     WHERE date_time像convert_date这样)= 1 THEN     // ...运行代码 其他     // ...运行此代码 END IF;

答案 3 :(得分:0)

您可以对字符数据类型使用LIKE,但不能对日期时间使用LIKE。日期时间的工作方式不同。您是否尝试过使用变量,然后使用如下所示的> =和<运算符?

DECLARE @Date1 date=‘2019-02-02;
DECLARE @Date2 date=DATEADD(day,1, @date1); 

SELECT COUNT(*) 
FROM table 
WHERE date_time >= @Date1 
  AND date_time < @Date2;