我要运行这样的条件:
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的新手,所以如果有人可以提供帮助,将不胜感激。
答案 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
运算符仅适用于字符串数据类型。
确定特定的字符串是否与指定的模式匹配。
随后:
参数
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;