选择字段为Distinct,数据类型为Text.Sql Server

Kam*_*ran 3 sql-server sql-server-2008

他们以任何方式选择一个字段为Distinct,其数据类型为Text.

如果我们有一个表,T1其中一个名为" Subjects数据类型" 的字段为Text.

Subjects
--------
Room
--------
Room
--------
window
--------
Door
--------
Door
--------
Run Code Online (Sandbox Code Playgroud)

如果我尝试这个查询

Select Distinct (Subjects)
from T1
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

The text data type can not be selected as DISTINCT because it is not comparable
Run Code Online (Sandbox Code Playgroud)

当我使用Group by时,给我这个错误:

The data types 'text', 'ntext' and 'image' can be compared or sorted, 
except when using IS NULL or LIKE operator.
Run Code Online (Sandbox Code Playgroud)

有什么解决方案吗?谢谢

AGB*_*AGB 10

您可以尝试首先将字段转换为varchar:

SELECT DISTINCT CONVERT(VARCHAR(MAX), Subjects) FROM T1
Run Code Online (Sandbox Code Playgroud)


Aar*_*and 8

虽然转换/转换答案有效,但真正的解决方法是停止使用TEXT数据类型.它已被弃用超过8年.出于各种原因VARCHAR(MAX),你应该使用它.

  • @Kami - 然后你需要`varchar(max)`.这支持大约20亿个字符.非常不寻常需要在这么长的字符串上使用`DISTINCT`. (2认同)