在PostgreSQL列中搜索第一个字符

时间:2018-07-02 00:06:03

标签: sql postgresql

我想按字符列表(括号表达式)从列中搜索第一个字符,但尽管有些客户的名称以非字母开头,但它会带走所有列字符。

我使用PostgreSQL。

SELECT name
FROM customs
WHERE name ~* '[a-z]'

2 个答案:

答案 0 :(得分:2)

https://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

  

SqlDataReader objReaderDetails; string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; using (SqlConnection conn = new SqlConnection(connectionString)) using (SqlCommand cmd = conn.CreateCommand()) { conn.Open(); cmd.CommandText = "dbo.usp_print"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@applicationId", ID); cmd.ExecuteNonQuery(); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable ds = new DataTable(); da.Fill(ds); 模式不同的是,允许将正则表达式匹配到字符串中的任何位置,除非正则表达式明确地锚定在字符串的开头或结尾。

     

一些例子:

LIKE

所以你的情况应该是

'abc' ~ 'abc'    true
'abc' ~ '^a'     true
'abc' ~ '(b|d)'  true
'abc' ~ '^(b|c)' false

如果您只想在WHERE name ~* '^[a-z]' 的开头进行匹配。

答案 1 :(得分:0)

您还可以省去正则表达式匹配,只需执行以下操作:

where name < 'a' or name >= '{'

{是ASCII图表中z之后的神秘字符。注意:对于此解决方案或任何解决方案,您可能需要检查排序规则是否区分大小写。