16、创建一个名为 unaccent() 的函数,该函数从作为参数传入的文本中移除 à、é、è、ê、ö、ô、ü,并分别用 a、e、e、e、oe、o、ue 替换它们。
不同数据库创建该函数的代码如下:
SQL Server:
create function unaccent(@string varchar(max))
returns varchar(max)
begin
return replace(replace(replace(replace(replace(replace(replace(@string, 'à', 'a'), 'é', 'e'), 'è', 'e'), 'ê', 'e'), 'ö', 'oe'), 'ô', 'o'), 'ü', 'ue');
end;
MySQL 和 DB2:
首先执行:
delimiter $$
然后执行:
create function unaccent(p_string varchar(1000))
returns varchar(1000)
return replace(replace(replace(replace(replace(replace(replace(p_string, 'à', 'a'), 'é', 'e'), 'è', 'e'), 'ê', 'e'), 'ö', 'oe'), 'ô', 'o'), 'ü', 'ue');
-
对于 MySQL ,接着输入
$$,再执行:
sql delimiter ; -
对于 DB2 ,在
clpplus中在行首输入/并回车。
PostgreSQL:
create function unaccent(p_string varchar)
returns varchar as $$
begin
return replace(replace(replace(replace(replace(replace(replace(p_string, 'à', 'a'), 'é', 'e'), 'è', 'e'), 'ê', 'e'), 'ö', 'oe'), 'ô', 'o'), 'ü', 'ue');
end;
$$ language plpgsql;
Oracle:
create function unaccent(p_string varchar2)
return varchar2 as
begin
return replace(replace(replace(replace(replace(replace(replace(p_string, 'à', 'a'), 'é', 'e'), 'è', 'e'), 'ê', 'e'), 'ö', 'oe'), 'ô', 'o'), 'ü', 'ue');
end;
/
17、创建一个名为 age() 的函数,该函数接收出生年份和死亡年份作为输入,若此人在世则返回其当前年龄,若此人已去世则返回死亡时年龄并在前面加上 ‘+’。
函数返回的表达式如下:
case
when @death_year is null
then cast(extract(year from getdate()) - @birth_year as varchar)
else '+' + cast(@death_year - @birth_year as varchar)
end
- 参数在 SQL Server 中应为
@death_year和@birth_year。 - 获取当前日期的函数和传递给
cast()函数的类型因数据库管理系统而异: - 在 SQL Server 中,字符串连接使用加号
+。 - 在 MySQL 中,
||应替换为对concat()函数的调用,且当前年份应使用year(now())。
18、一个网站为了进行统计分析,按小时统计访问次数,并将数据存储在如下创建的表中(根据你的数据库管理系统调整数据类型):创建表webstats(interval_start datetime, interval_unit char(1), page varchar(255), hits int)。interval_unit 为’H’表示小时,为’D’表示天;page 是被请求的网站页面;hits 统计在 interval_start 到 interval_start 加上 interval_unit 对应时间之间该页面被请求的次数。我们希望保留详细的近期信息,但要对每个页面聚合所有超过三个月的数据。编写一个每周运行的过程,用于聚合旧数据并清除过旧的详细信息。
以下是不同数据库管理系统(DBMS)的实现示例:

最低0.47元/天 解锁文章
1762

被折叠的 条评论
为什么被折叠?



