我使用"类似于"创建了一个域名。在firebird 2.5下运行,但现在我必须将我的数据库降级到Firebird 2.1,并且由于该功能似乎不可能。 我想找到用" Like"来表达我的域名的方法。功能,以便它在Firebird 2.1中运行。这是我的域代码:
CREATE DOMAIN CODET
AS varchar(16)
NOT NULL
CHECK (char_length(value)=16
and
value SIMILAR TO
'[G]{1}[C,M,E]{1} [1-6]{1} [E]{1}[P,S,L]{1}
[A-E]{1} [0-9]{1}[0-9]{1} [0-9]{1}[0-9]{1}[0-9]{1}'
and substring(value from 14 for 3)>'000')
COLLATE NONE;
答案 0 :(得分:2)
您可以尝试"翻译"它是按术语计算的,即
[G]{1}
,这意味着该值必须以G
开头,因此会变为value STARTING WITH 'G'
[C,M,E]{1}
- 第二个字符必须是C,M或E (value like '_C%')or(value like '_M%')or(value like '_E%')
[1-6]{1}
- 第四个字符必须是1到6之间的数字,包括。所以SUBSTRING(value FROM 4 FOR 1) BETWEEN '1' AND '6'
等等。然后将它们合并为一个:
...
CHECK ( char_length(value)=16
and value STARTING WITH 'G'
and( (value like '_C%')or(value like '_M%')or(value like '_E%') )
and SUBSTRING(value FROM 4 FOR 1) BETWEEN '1' AND '6'
...
)
由于您的字符串是固定长度,并且其中的空格处于固定位置,您可以在单个字词中检查它们,如此
value like '__ _ __ _ __ ___'
即所有非空间位置都标有_
,空格位置包含空格字符。
或者你可以使用一些实现similar to
操作的UDF。