SQL Server:在“=CONVERTdate,DATEADDDAY,-7,GETDATE 或者@BasvuruTarihi=N'Last 1week'和KAYITTARIHI>=CONVERTdate,DATEADDDAY,-30,GETDATE-这不是一个月 或者@BasvuruTarihi=N'Last 1week'和KAYITTARIHI>=CONVERTdate,DATEADDDAY,-180,GETDATE-这不是6个月 选项重新编译; 适当地使用换行符和空白将使SQL更易于阅读和调试ISNULL@Adi,ADI+“%”将远远无法执行。您将日期时间比较作为大小写表达式的一部分,这是非法的。大小写表达式只能eturn一个值。根据这些比较应该做什么,您还可能从不同的分支获得完全不同的返回值,这也是非法的。那么DATEDIFFday、KAYITTARIHI、GetDateCase表达式返回标量值的原因是什么呢?看看您的吧;您有两个子句返回标量值,而另外3个子句返回标量值n一个布尔结果,然后将这些值与KAYITTARIHI进行比较,这没有任何意义。同样,一些格式会很快向您演示这个问题。
下面是一个向我的darknet项目返回查询的过程。我想在where中获取最近6个月、最近1周和最近1个月的记录 我将根据查询结果返回“KAYITTARIHI”SQL Server:在“=CONVERTdate,DATEADDDAY,-7,GETDATE 或者@BasvuruTarihi=N'Last 1week'和KAYITTARIHI>=CONVERTdate,DATEADDDAY,-30,GETDATE-这不是一个月 或者@BasvuruTarihi=N'Last 1week'和KAYITTARIHI>=CONVERTdate,DATEADDDAY,-180,GETDATE-这不是6个月 选项重新编译; 适当地使用换行符和空白将使SQL更易于阅读和调试ISNULL@Adi,ADI+“%”将远远无法执行。您将日期时间比较作为大小写表达式的一部分,这是非法的。大小写表达式只能eturn一个值。根据这些比较应该做什么,您还可能从不同的分支获得完全不同的返回值,这也是非法的。那么DATEDIFFday、KAYITTARIHI、GetDateCase表达式返回标量值的原因是什么呢?看看您的吧;您有两个子句返回标量值,而另外3个子句返回标量值n一个布尔结果,然后将这些值与KAYITTARIHI进行比较,这没有任何意义。同样,一些格式会很快向您演示这个问题。,sql,sql-server,tsql,case,Sql,Sql Server,Tsql,Case,下面是一个向我的darknet项目返回查询的过程。我想在where中获取最近6个月、最近1周和最近1个月的记录 我将根据查询结果返回“KAYITTARIHI” ALTER PROCEDURE [dbo].[CVSearch] @Adi nvarchar(50) = NULL, @Soyadi nvarchar(50) = NULL, @BasvuruTarihi nvarchar(50) = NULL AS IF (@Adi = '') SET @
ALTER PROCEDURE [dbo].[CVSearch]
@Adi nvarchar(50) = NULL,
@Soyadi nvarchar(50) = NULL,
@BasvuruTarihi nvarchar(50) = NULL
AS
IF (@Adi = '')
SET @Adi = NULL
IF (@Soyadi = '')
SET @Soyadi = NULL
IF (@BasvuruTarihi = '')
SET @BasvuruTarihi = NULL
SELECT ID_CV
FROM CV
WHERE KULLANICILAR_CV_SILMEDURUMU = 0
AND ADI LIKE '%' + ISNULL(@Adi, ADI) + '%'
AND SOYADI LIKE '%' + ISNULL(@Soyadi, SOYADI) + '%'
AND CASE
WHEN @BasvuruTarihi = 'Hepsi'
THEN KAYITTARIHI
WHEN @BasvuruTarihi = 'Last 1 week'
THEN DATEDIFF(day, KAYITTARIHI, GETDATE()) < 8
WHEN @BasvuruTarihi = 'Last 1 month'
THEN DATEDIFF(day, KAYITTARIHI, GETDATE()) < 31
WHEN @BasvuruTarihi = 'Last 6 month'
THEN DATEDIFF(day, KAYITTARIHI, GETDATE()) < 180
ELSE @BasvuruTarihi
END = KAYITTARIHI
但我有以下错误:
“附近的语法不正确这是一个完全盲目的猜测,但我猜这是你真正想要的东西。由于领先的通配符,这仍然不会有效果,但是,我至少已经尽可能多地做到了这一点。我还添加了选项重新编译,以使数据引擎有最好的机会使用q与查询相关的查询计划 选择ID\U CV 来自dbo.CV 其中Kulanicilar_CV_SILMEDURUMU=0 与ADI类似的N“%”+@ADI+N“%”或@ADI为空 与SOYADI类似的N“%”+@SOYADI+N“%”或@SOYADI为NULL 和@BasvuruTarihi=N'Hepsi' 或者@BasvuruTarihi=N'Last 1 week'和KAYITTARIHI>=CONVERTdate,DATEADDDAY,-7,GETDATE 或者@BasvuruTarihi=N'Last 1week'和KAYITTARIHI>=CONVERTdate,DATEADDDAY,-30,GETDATE-这不是一个月 或者@BasvuruTarihi=N'Last 1week'和KAYITTARIHI>=CONVERTdate,DATEADDDAY,-180,GETDATE-这不是6个月 选项重新编译;
适当地使用换行符和空白将使SQL更易于阅读和调试ISNULL@Adi,ADI+“%”将远远无法执行。您将日期时间比较作为大小写表达式的一部分,这是非法的。大小写表达式只能eturn一个值。根据这些比较应该做什么,您还可能从不同的分支获得完全不同的返回值,这也是非法的。那么DATEDIFFday、KAYITTARIHI、GetDateCase表达式返回标量值的原因是什么呢?看看您的吧;您有两个子句返回标量值,而另外3个子句返回标量值n一个布尔结果,然后将这些值与KAYITTARIHI进行比较,这没有任何意义。同样,一些格式会很快向您演示这个问题。