2015-11-14 65 views
1

我如何有一個列名字應該是唯一的字母 和電話號碼應該是唯一的號碼HSQLHSQL查詢約束的字母和數字

我寫的東西像

ALTER TABLE USER 
ADD CONSTRAINT CHECK_USER_FIRST_NAME CHECK (FIRST_NAME NOT LIKE '%[^A-Z ]%') 

但它允許我不想要的Tp1。 有人可以幫我約束在HSQL

+0

它應該[demo](https://data.stackexchange.com/stackoverflow/query/391797)。嘗試引用標識符「CREATE TABLE」用戶「...」和「ALTER TABLE」用戶「...」。也分享有關默認COLATION – lad2025

+0

@ lad2025的信息:不,它不起作用。 SQL LIKE運算符不支持「範圍」或正則表達式(SQL Server的T-SQL與此不同 - 但不支持_real_正則表達式) –

回答

1

LIKE不支持正則表達式。它支持的唯一通配符是多個字符的%和單個字符的_。要匹配的正則表達式,你需要regexp_matches()

ALTER TABLE user 
    ADD CONSTRAINT check_user_first_name 
    CHECK (regexp_matches(first_name, '[A-Z]+')) 

這將只允許大寫字母,所以你可能想使用'[A-Za-z]+'代替。它還需要名稱中至少有一個字符。如果您想允許空字符串,請將+更改爲*。這仍然會允許空值。


請注意USER是SQL中的保留關鍵字。您不應該使用該名稱創建表格。如果你試試這個例如在Oracle或PostgreSQL上它會失敗。這個名字需要被引用 - 這不是一個好主意。你應該找到一個不同的名字。