【问题标题】:Using CAST or CONVERT in CONTAINS - SQL Server在 CONTAINS 中使用 CAST 或 CONVERT - SQL Server
【发布时间】:2016-10-13 07:14:57
【问题描述】:

我正在尝试在这样的 SQL 查询中使用 CASTCONVERT 函数:

SELECT *
FROM [SQL_BMS].[dbo].[GEID]
WHERE CONTAINS(CONVERT(nvarchar(max), NUID), 'titre')

SELECT *
FROM [SQL_BMS].[dbo].[GEID]
WHERE CONTAINS(CAST(NUID as nvarchar(max)), 'titre')

但我遇到了错误:

关键字“CONVERT”附近的语法不正确

关键字“as”附近的语法不正确

那么如何将我的NUID 列从Int 转换为nvarchar

【问题讨论】:

  • 你想做什么?如果 NUID 是一个整数,您如何期望它包含字符串“tire”?
  • 我之前的评论无关紧要。你想如何在 INTEGER 列中找到一些 TEXT??
  • @Martin Smith 因为我不会专门使用整数,而是使用日期 + 文本 + ...
  • @EmmanuelG。 CONTAINS 与full-text search 一起使用。全文搜索可用于具有以下数据类型的列:char、varchar、nchar、nvarchar、text、ntext、image、xml 或 varbinary(max) 和 FILESTREAM。
  • @gofr1 我想对包含多种类型的包含进行列连接:日期、整数、文本、varchar ......并在连接中找到一个字符串

标签: sql sql-server


【解决方案1】:

您需要创建一个viewSCHEMABINDING,以及一些ID 和连接列。

CREATE VIEW dbo.[view_GEID]  
WITH SCHEMABINDING  
AS  
SELECT  NUID, 
        Col1+Col2+CAST(Col3 as nvarchar(50))... as ConcatColumn
FROM dbo.GEID

然后在该视图上创建full-text 索引。然后您可以使用CONTAINS 进行搜索。

SELECT *
FROM [SQL_BMS].[dbo].[view_GEID]
WHERE CONTAINS(ConcatColumn, 'titre')

另一种方法是连接您需要的所有列并使用LIKE,但这可能会导致性能下降。

SELECT *
FROM [SQL_BMS].[dbo].[GEID]
WHERE Col1+Col2+CAST(Col3 as nvarchar(50))... LIKE '%titre%'

【讨论】:

  • 谢谢,你的解决方案是最好的解决方案,所以你就是我的答案。
  • 太棒了! ;)
【解决方案2】:

试试这个:

    SELECT *
    FROM [SQL_BMS].[dbo].[GEID]
    WHERE CONTAINS(CONVERT(nvarchar(max),NUID), 'titre')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2014-08-29
    • 2016-12-27
    相关资源
    最近更新 更多