Sql server SqlServer使用单列选择Distinct

Sql server SqlServer使用单列选择Distinct,sql-server,distinct,Sql Server,Distinct,我有一个列,其中包含发生此操作的服务器以及国家/地区。因此,例如,“source”列将包含“server001[en-US]”。我需要做的是列出所有不同的国家代码 ID SOURCE STATUS ============================== 1 server001[en-US] 3 2 server002[de-CH] 3 3 server005[en-US] 1 4 server001[tr-TR] 3 理

我有一个列,其中包含发生此操作的服务器以及国家/地区。因此,例如,“source”列将包含“server001[en-US]”。我需要做的是列出所有不同的国家代码

ID  SOURCE              STATUS
==============================
1   server001[en-US]    3
2   server002[de-CH]    3
3   server005[en-US]    1
4   server001[tr-TR]    3
理想的查询将输出

en-US
de-CH
tr-TR

有人能帮忙吗?

这会给你一个不同国家代码的列表:

SELECT 
   LEFT(COL, LEN(COL) - 1)
FROM (
    SELECT
        RIGHT(SOURCE, LEN(SOURCE) - CHARINDEX('[', SOURCE)) COL
    FROM TABLE) TBL

这将为您提供不同国家/地区代码的列表:

SELECT 
   LEFT(COL, LEN(COL) - 1)
FROM (
    SELECT
        RIGHT(SOURCE, LEN(SOURCE) - CHARINDEX('[', SOURCE)) COL
    FROM TABLE) TBL

您需要使用
子字符串
charindex
charindex
将为您提供列中字符串的位置,
substring
非常明显

我没有对此进行测试,但类似这样的测试应该可以做到:

select distinct substring(source
     , charindex('[', source)
     , charindex(']', source) - charindex('[', source))
     );

您需要使用
子字符串
charindex
charindex
将为您提供列中字符串的位置,
substring
非常明显

我没有对此进行测试,但类似这样的测试应该可以做到:

select distinct substring(source
     , charindex('[', source)
     , charindex(']', source) - charindex('[', source))
     );

理想的数据库不会在一列中存储多个信息;)同意蒂姆。。。但在我工作的世界里,没有什么是理想的:)理想的数据库不会在一列中存储多个信息;)同意蒂姆。。。但在我工作的这个世界上,没有什么是理想的:)太好了,谢谢你的帮助,奥利弗。当然,我必须添加表名,以及+1代表from arg和-1代表to arg,以便只打印en-US等。非常好,感谢您的帮助Olivier。当然,我必须添加表名,以及+1(对于from arg)和-1(对于to arg)以仅打印en-US等。