我想按字符列表(括号表达式)从列中搜索第一个字符,但尽管有些客户的名称以非字母开头,但它会带走所有列字符。
我使用PostgreSQL。
SELECT name
FROM customs
WHERE name ~* '[a-z]'
答案 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
之后的神秘字符。注意:对于此解决方案或任何解决方案,您可能需要检查排序规则是否区分大小写。