在Oracle中,是否可以使用单个正则表达式匹配特定字符串格式和空字符串?
有点像:
SELECT 1
FROM DUAL
WHERE REGEXP_LIKE('12345', '^([1-5]{5})|NULL$');
SELECT 1
FROM DUAL
WHERE REGEXP_LIKE('', '^([1-5]{5})|NULL$');
SELECT 1
FROM DUAL
WHERE REGEXP_LIKE(NULL, '^([1-5]{5})|NULL$');
Run Code Online (Sandbox Code Playgroud)
其中正则表达式的"NULL"部分被视为字符类而不是字符串文字,并且所有三个查询都返回1.
我正在编写一些数据验证例程,并希望存储/使用一个正则表达式来确定格式以及输入字符串是否为空 - 而不是为每个数据元素单独指定那些验证规则.
谢谢,杰夫
我目前有一个表(/网格)的数据,我可以页面,筛选和排序.在桌子上我也有一个内置的复选框列.现在,分页,过滤和排序都发生在SQL查询中.我希望能够做的是按复选框列中单击的项目排序.这会将所有检查的项目带到表格的前面.由于复选框本身都是客户端,我不能告诉SQL查询按不存在的列排序(可能我需要动态创建一个?)
本质上我认为会发生的是,复选框ID值将被发送到查询中,SQL查询本身会以某种方式知道按先排序,然后由指定的其他查询排序.
有点像,点击1,2和3:
SELECT*FROM Blah ORDER BY(SELECT ID FROM Blah WHERE ID IN(1,2,3)),AnotherColumnToSort
无论如何,这是计划,任何人都有任何关于如何实现这一目标的想法?
更新:Smack我在Oracle数据库而不是SQL Server,就像我想象的那样.
我有一个表定义如下:
create table apple(
A number,
B number);
Run Code Online (Sandbox Code Playgroud)
现在,我需要在表中获取值,如下所示:
A B
------------------
1 4(max of A)
2 4(max of A)
3 4(max of A)
4 4(max of A)
Run Code Online (Sandbox Code Playgroud)
如何插入这些行,使其B最大值为A?
我在Oracle 10g中使用REGEXP_LIKE函数来查找后缀为_#的列中的值(如_1,_2等).我可以使用下面的查询在值的任何部分找到_#但是我最后只能返回_#的值吗?
SELECT * FROM Table WHERE REGEXP_LIKE (COLUMN,'_[[:digit:]]')
Run Code Online (Sandbox Code Playgroud) 如果我在Oracle中有物化视图,定义为REFRESH FAST ON COMMIT每15分钟一次.它在最初创建和快乐刷新时有效.什么可以导致它停止快速刷新?
我可以看到它已基于此停止刷新:
select mview_name, last_refresh_date from all_mviews;
Run Code Online (Sandbox Code Playgroud) insert into XYZ(col1, col2) values (1,2)
update XYZ set ... where col1 = 1
COMMIT
Run Code Online (Sandbox Code Playgroud)
正如在上面的代码中看到的,我们还没有提交我们的insert语句,我们在同一行上执行了更新操作,最后我们提交了整个批处理.
在这种情况下究竟会发生什么?在这种情况下是否有丢失数据的可能性?
我有一个SQL*Loader控件文件,其行如下:
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '#'
Run Code Online (Sandbox Code Playgroud)
通常情况下,我会使用引号,但如果在多行字符串中使用,这似乎会破坏emacs的python语法突出显示.问题是我们正在加载一个ADDRESS_LINE_2列,其中只有7,000个记录正在加载,因为它们有这样的行:
......(其他专栏),Apt#2,(其他专栏)......
这当然会导致错误.有没有办法逃脱封闭的角色,所以这不会发生?或者我只需要选择一个更好的封闭角色?
我查看了文档,但似乎没有找到答案.
我发现需要经常通过电子邮件发送SQL语句,我想知道是否有人有一个工具可以对Oracle保留字,关键字和命名空间进行颜色编码,这样当代码从工具中复制到Lotus说明时就会出现在电子邮件中,就像在工具中一样.
我们从sql server端迁移到oracle.
在sqlserver上我们曾经有过如下的视图
create view blah
AS
Select column1,
column2
FROM blah;
Run Code Online (Sandbox Code Playgroud)
但在oracle上执行此操作会产生循环视图错误.
这是不允许在甲骨文方面?
我是Oracle的新手(我一直在使用MySQL,直到现在)所以这可能是一个愚蠢的问题.但是我创建了这个表(名字不是英文但忽略它,这并不重要):
CREATE TABLE Auta (
id_auto NUMBER(5) UNIQUE NOT NULL,
typ CHAR(10),
specifikacia_typu CHAR(15),
SPZ CHAR(8),
farba CHAR(20),
datum_vyroby DATE,
pocet_miest NUMBER(2),
pociatok_km NUMBER(6),
poplatok_denny NUMBER(4),
poplatok_km NUMBER(2));
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用这个INSERT查询:
INSERT INTO Auta VALUES (
1
,'Audi'
,'A6'
,'KE1-1548'
,'cierna'
,'20-12-2004'
,5
,158749
,1356
,88
);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
ORA-01843: not a valid month
Run Code Online (Sandbox Code Playgroud)
我使用的日期格式是DD-MM-YYYY.我也试过DD.MM.YYYY,DD/MM/YYYY,我也尝试过像这样的月 - 日转换 - MM-DD-YYYY,MM/DD/YYYY - 仍然是同样的错误.
该怎么办?