相关疑难解决方法(0)

如何比较两个字符串是否在SQL Server 2008的T-SQL中包含相同的单词?

当我在SQL Server中比较两个字符串时,有几种简单的方法用=LIKE.

我想重新定义平等:

如果两个字符串包含相同的单词 - 无论以什么顺序 - 它们是相等的,否则它们不是.

例如:

  • 'my word'并且'word my'是平等的
  • 'my word''aaamy word'不是

这个问题最简单的解决方案是什么?

sql t-sql sql-server sql-server-2008

7
推荐指数
1
解决办法
1万
查看次数

使用Sql计算TF-IDF

我的数据库中有一个包含自由文本字段列的表.

我想知道每个单词出现在所有行上的频率,或者甚至可以为所有单词计算TF-IDF,其中我的文档是每行的字段值.

是否可以使用Sql查询来计算?如果没有或有更简单的方法,请指导我吗?

非常感谢,

乔恩

sql tf-idf sql-server-2008

6
推荐指数
1
解决办法
3898
查看次数

我需要在select语句中拆分字符串并插入表

我在一个表中有一个数据.我需要将它复制到另一个表.其中一列是文本分隔的字符串.所以我正在考虑选择所有列插入get indentity值,并使用子查询基于分隔符进行拆分并将其插入另一个表.

这是数据示例

ID     Name     City       Items
1      Michael  Miami      item|item2|item3|item4|item5
2      Jorge    Hallandale item|item2|item3|item4|item5
Run Code Online (Sandbox Code Playgroud)

将" 名称"," 城市"复制到一个表获取标识并将项目拆分并复制到另一个具有"标识列值"的表

所以输出应该是

用户表

UserID Name     City
1      Michael  Miami
2      Jorge    Hallandale
Run Code Online (Sandbox Code Playgroud)

...

Items table

ItemID   UserID   Name
1        1        Item
2        1        Item2
3        1        Item3
4        1        Item4
5        2        Item
6        2        Item2
7        2        Item3
8        2        Item4
Run Code Online (Sandbox Code Playgroud)

不确定如何用T-SQL做到这一点.将举例说明答案

sql t-sql

6
推荐指数
1
解决办法
3752
查看次数

SQL Server中的单词匹配

我需要在两个数据库表中的数据之间提供建议的匹配.基本要求是; - 对于所讨论的两列之间的最大匹配单词数(不论顺序),应建议"匹配".

例如,给定数据;

   Table A                           Table B
1,'What other text in here'      5,'Other text in here'
2,'What am I doing here'         6,'I am doing what here'
3,'I need to find another job'   7,'Purple unicorns'
4,'Other text in here'           8,'What are you doing in here'

Ideally, my desired matches would look as follows;
1 -> 8   (3 words matched)
2 -> 6   (5 words matched)
3 -> Nothing
4 -> 5   (4 words matched)
Run Code Online (Sandbox Code Playgroud)

我发现字数统计函数看起来很有希望,但我想不出如何在SQL语句中使用它,这将给我我想要的匹配.此外,链接的函数不是我需要的,因为它使用charindex,我认为在单词中搜索单词(即'in'将匹配'bin').

任何人都可以帮我解决这个问题吗?

谢谢.

sql-server matching

5
推荐指数
1
解决办法
2293
查看次数

用于通过转换表进行匹配的SQL模式

我有来自两个不同来源的脏数据.我正在寻找一些匹配它们的最佳实践.以下是一些数据示例:

Source1.Name                   Source2.Name
Adda Clevenger Jr Prep School  Adda Clevenger Junior Preparatory School
Alice Fong Yu Alt School       Alice Fong Yu Alternative School
Convent Of Sacred Heart Es     Convent of Sacred Heart Elementary School
Rosa Parks Elementary School   Rosa Parks Elementary School
Run Code Online (Sandbox Code Playgroud)

人类可以看到这4个例子应该与理想的模糊匹配相匹配.我拥有传统模糊匹配的优秀软件,可以捕捉拼写错误和其他小变化.但是在这个数据集中,我有大约十几个规则来管理缩写,比如'Preparatory' - >'Prep'.我想在查询中捕获所有这些规则.(然后我将分别处理更传统的模糊性.)

是否有一个众所周知的SQL模式来处理这个要求?它可以像学习magic关键字一样简单,它将解锁我的搜索中的示例.这是一种"翻译表"或"缩写表",但我只是提出了这些条款.我还没有找到被广泛接受的术语.

从概念上讲,我的目标是从这个天真的查询开始:

/* This succeeds for 1 record and fails for 3 in the sample data set above. */
SELECT * FROM ...
WHERE Source1.Name = Source2.Name
Run Code Online (Sandbox Code Playgroud)

然后将其修改为获得上面显示的所有所需匹配的内容.我希望我能用一些嵌套的REPLACE函数来强制它:

/* This works for the 4 samples …
Run Code Online (Sandbox Code Playgroud)

sql oracle fuzzy-search match abbreviation

5
推荐指数
1
解决办法
694
查看次数

如何在 SQL 查询中使用转义和 LIKE

我的查询是:

declare @param1 INT,
@param2 nvarchar(max)

set @param1 = 1
set @param2 = '[Test_data_forQry],[Next_Test_Data]'

SELECT * 
FROM Table1
WHERE
    ColumnA = @param1  
AND (',' + @param2 +',' LIKE '%,' + CONVERT(VARCHAR, ColumnB) + ',%');
Run Code Online (Sandbox Code Playgroud)

方括号和下划线阻止数据获取。我的问题是我应该在查询的最后一行中放置转义“\” 。我也尝试过REPLACE选项,但没有用

set @param1 = 1
set @param2 = '[Test_data_forQry],[Next_Test_Data]'

set @param2  = replace (replace(@param2  , '[', '[[]'), '_','[_]') 

SELECT * 
FROM Table1
WHERE
    ColumnA = @param1  
AND (',' + @param2 +',' LIKE '%,' + CONVERT(VARCHAR, ColumnB) + ',%');
Run Code Online (Sandbox Code Playgroud)

sql t-sql

5
推荐指数
1
解决办法
918
查看次数

如何从select语句中选择结果的子集

我有一个存储RDF三元组的表:

三元组(triple_id,sub_id,pre_id,obj_id)

方法(我需要写)将接收与pre_id值对应的数字数组.我想选择所有sub_id值,这些值对于传入的数组中的所有pre_id都有相应的pre_id.

例如,如果我传入了一个pre_id值...让我们调用preId中传递的值,我会这样做:

从triples中选择sub_id,其中pre_id = preId;

但是,由于我有多个pre_id值,我想继续迭代pre_id值,并且只保留sub_id值对应于具有两者的"三元组"记录.

例如,图像有五条记录:

triples(1, 34,65,23)
triples(2, 31,35,28)
triples(3, 32,32,19)
triples(4, 12,65,28)
triples(5, 76,32,34)
Run Code Online (Sandbox Code Playgroud)

如果我传入一个pre_id值数组[65,32],那么我想选择第一,第三,第四和第五条记录.

我该怎么做?

sql

4
推荐指数
1
解决办法
4442
查看次数

在MS SQL中,如何将列拆分为没有分隔符的行

我有一个表中的数据看起来像这样(值得注意的是它不是CSV分离)

它需要分成单个字符

Data
abcde
Run Code Online (Sandbox Code Playgroud)

想把它转换成这个

Data
a
b
d
c
e
Run Code Online (Sandbox Code Playgroud)

我在互联网上看了但没有找到答案

t-sql sql-server

4
推荐指数
1
解决办法
2055
查看次数

SQL Server用逗号分隔

我有一个关于在T-SQL中拆分列值的问题.我有

Address_col

Nevada,USA
Tokyo,Japan
Hanoi,Vietnam
Run Code Online (Sandbox Code Playgroud)

我想用逗号分割值

Address_col     Country

Navada          USA
Tokyo           Japan
Hanoi           Vietnam
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

sql-server split

4
推荐指数
1
解决办法
1万
查看次数

使用varchar和bigint的SQL Server IN运算符

我使用存储过程搜索并使用SQL IN运算符返回匹配ID列表时遇到一些问题.我认为这个问题与数据类型有关.

参数作为字符串'32,1,5,78,43'传递给存储过程 - 这需要作为IN运算符传递到查询中以搜索字段Column1.Bigint中此字段的数据类型.

DECLARE @TEST varchar(1000)
SET @TEST = REPLACE('32,1,5,78,43', '''','')

SELECT Column1, Column2 
FROM Table
WHERE Column1 IN(@TEST)
Run Code Online (Sandbox Code Playgroud)

试图删除字符串中的引号似乎并不工作,我得到一个错误回了句"错误转换数据类型为varchar为bigint."

在没有存储过程的情况下运行代码,并将值直接放入IN运算符(不带引号),然后可以正常工作并返回正确的值.例如

SELECT Column1, Column2 
FROM Table
WHERE Column1 IN(32,1,5,78,43)
Run Code Online (Sandbox Code Playgroud)

请问有人可以告诉我这里的错误吗?

sql t-sql sql-server

4
推荐指数
1
解决办法
4015
查看次数