NEWID
功能描述
NEWID函数用于生成一个随机UUID。UUID是一个32位的十六进制数据,具有全局唯一性。
返回类型: UUID类型(uniqueidentifier类型)
注意事项
该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。
NEWID()的结果遵循RFC 4122规范。
语法格式
NEWID()
示例
示例1: 直接调用NEWID函数。
select NEWID();
返回结果如下:
newid
--------------------------------------
0297db7c-d799-4872-b777-4f06e54fa2c0
(1 row)
示例2: 创建一个包含UUID类型的测试表,调用NEWID函数向测试表中插入数据。
1、创建测试表,其中字段col1的数据类型为UUID。
CREATE TABLE table_1309 (
col1 UUID NOT NULL ,
col2 text);
2、调用NEWID函数向col1字段插入UUID数据。
insert into table_1309 values (newid(),'test');
3、查看测试表数据。
select * from table_1309;
返回结果如下:
col1 | col2
--------------------------------------+------
4f029714-0b0a-4d08-b183-8ef6907e7f96 | test
(1 row)
示例3: 创建一个包含UUID类型的测试表,指定UUID字段默认值为NEWID()。
1、创建测试表dept,其中deptno为UUID类型。
CREATE TABLE dept (
deptno UUID NOT NULL default newid(), dname VARCHAR2(14), loc VARCHAR2(13));
2、向dept表中插入数据,插入时不指定字段deptno的值。
INSERT INTO dept(dname,loc) VALUES ('ACCOUNTING','NEW YORK');
INSERT INTO dept(dname,loc) VALUES ('RESEARCH','DALLAS');
INSERT INTO dept(dname,loc) VALUES ('SALES','CHICAGO');
INSERT INTO dept(dname,loc) VALUES ('OPERATIONS','BOSTON');
3、插入数据时deptno字段将自动填充NEWID()的结果。查看测试表数据:
select * from dept;
返回结果如下:
deptno | dname | loc
--------------------------------------+------------+----------
98527b7a-c918-4862-b2ad-f573a34f9826 | ACCOUNTING | NEW YORK
337b53bb-2016-40dc-a02f-c4ede2b109dd | RESEARCH | DALLAS
cb380d0d-e016-448e-9920-8eab8ad7720c | SALES | CHICAGO
57f9aa19-2d52-4deb-8e24-8e83b16b6ee6 | OPERATIONS | BOSTON
(4 rows)
示例4: 将NEWID的值赋给自定义变量使用。
1、设置参数enable_set_variable_mssql_format为on,表示在SQL Server数据库兼容模式下支持自定义用户变量的功能。
set enable_set_variable_mssql_format=on;
2、将NEWID的值赋给@b_1155。
declare @b_1155 UUID =newid();
3、直接查看变量@b_1155的值。
select @b_1155;
返回结果如下:
@b_1155
--------------------------------------
fe5da549-7c93-41a7-95f6-19735a7a73e1
(1 row)
示例5: 使用NEWID函数查询随机数据。
示例在查询语句中使用了TOP子句来限制查询结果集中返回的行数。
1、创建测试表并插入数据。
create table product (ID UUID default NEWID(), name text);
insert into product (name) values('pdt1'),('pdt2'),('pdt3'),('pdt4'),('pdt5'),('pdt6'),('pdt7'),('pdt8'),('pdt9'),('pdt10');
2、使用如下语句进行查询,其含义是从product表中查询随机记录,TOP子句表示仅返回前5条记录。
SELECT TOP 5 ID, Name FROM Product ORDER BY NEWID();
返回结果是随机的5条数据,例如:
id | name
--------------------------------------+-------
a77df42e-2b43-4055-9c47-58434e33bf26 | pdt5
056478cc-8d87-45a4-a804-c3afca32d2ce | pdt7
123a02bb-66b7-4bd9-9049-b813c3d29141 | pdt2
aeeaed81-df01-4a91-a6eb-50ea4d834941 | pdt3
625b1aa3-3afd-4d35-8a1d-6e1a4bf6964c | pdt10
(5 rows)