sql server中,一栏位格式如:国家-省-城市-... 现在我要按照城市来筛选数据,怎么使用sql语句来实现?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server中,一栏位格式如:国家-省-城市-... 现在我要按照城市来筛选数据,怎么使用sql语句来实现?相关的知识,希望对你有一定的参考价值。

其实也就是使用第二个“-”和第三个“-”之间的内容来比较

参考技术A SELECT * FROM 表名 WHERE (字段名 LIKE '%城市名%')
把其中的
表名、字段名、城市名
改成你的即可。
参考技术B 因为不是固定位数的,可以试试用自定义函数的方法实现,就是自定义一个函数,截取这个字段的第二个“-”和第三个“-”之间的内容。 参考技术C select PATINDEX ('%-%-桂林-%', '中国-广西-桂林-两江机场')

select PATINDEX ('%-%-桂林-%', '中国-上海-徐汇区-桂林路')

select PATINDEX ('%-%-中国%', '中国-广西-桂林-两江机场');

select PATINDEX ('%-%-广西%', '中国-广西-桂林-两江机场');

勉强能用, 略有些问题.本回答被提问者和网友采纳

如何使LAG()在SQL Server中忽略NULL?

有人知道如何用字符串替换列中的空值,直到命中新的字符串,然后该字符串替换其下的所有空值?我有一栏看起来像这样]

原始列:

PAST_DUE_COL           
91 or more days pastdue        
Null
Null
61-90 days past due          
Null
Null
31-60 days past due
Null
0-30 days past due
Null       
Null
Null            

预期结果列:

PAST_DUE_COL           
91 or more days past due        
91 or more days past due
91 or more days past due
61-90 days past due          
61-90 days past due 
61-90 days past due 
31-60 days past due
31-60 days past due
0-30 days past due
0-30 days past due      
0-30 days past due
0-30 days past due

基本上,我希望列中的第一个字符串替换它下面的所有空值,直到下一个字符串。然后,该字符串将替换其下的所有null,直到下一个字符串,依此类推。

有人知道如何用字符串替换列中的空值,直到命中新的字符串,然后该字符串替换其下的所有空值?我有一列看起来像这样的原始列:...

答案

SQL Server不支持ignore nullslead()之类的窗口函数的lag()选项,对此问题很合适。

另一答案

这是GMB回答的一种变体。只是简单一点:

另一答案

如果您有一个ID列,但前导/滞后不可用,则可以使用:

以上是关于sql server中,一栏位格式如:国家-省-城市-... 现在我要按照城市来筛选数据,怎么使用sql语句来实现?的主要内容,如果未能解决你的问题,请参考以下文章

世界国家省城市SQL

oracle 中update 多列

Sql Server2005数据库怎么查看视图里的字段。

sql server 如何改变计算结果的值 如null改变为0

州/省世界数据

SQL SERVER中的And与Or的优先级