Oracel 常用函数

本文详细介绍SQL中的字符类、数字类、日期类、转换类及聚合类函数,包括ASCII码转换、数学运算、日期操作等功能,适用于数据库管理和数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、字符类函数

1、 ASCII(<c1>)

该函数用于返回c1第一个字母的ASCII码,其中c1是字符串,它的逆函数是CHR()

2、CHR(<i>)

该函数用于求i对应的ASCII字符,其中i是一个数字

3、CONCAT(c1,c2)

该函数将c2连接到c1的后面,如果c1为nul,将返回c2;如果c2为null,则返回c1;如果c1、c2都为null,则返回为null。其中,c1、c2均为字符串,它和操作符“||”返回结果相同。

4、INITCAP(c1)

该函数将c1中每个单词的第一个字母大写,其他字母小写返回。单词由空格、控制字符、标点符号限制,其中c1为字符串

5、INSTR(c1,[c2,<i>[,j]])

该函数用于返回c2在c1中第j次出现的位置,搜索从c1的第i个字符开始。当没有发现需要的字符时返回0,如果i为负数,那么搜索将从从右到左进行,但是位置还是从左到右来计算,i和j的默认值为1。其中,c1、c2均为字符串,i、j为整数。

6、LENGTH(c1)

该函数用于返回c1的长度,如果c1为null,那么将返回null值。其中c1为字符串。

7、LOWER(c1)

该函数用于返回c1的小写字符,经常出现在WHERE子串中。UPPER(c1)用来返回大写字母

8、LTRIM(c1,c2)

该函数表示将c1中最左边的字符去掉,使其第一个字符不在c2中,如果没有c2,那么c1就不会改变

9、REPLACE(c1,c2[,c3])

该函数用c3代替出现在c1中的c2后返回,其中c1、c2、c3都是字符串

10、SUBSTR(c1,<i>[,j])

该函数表示从c1的第i位开始返回长度为j的子字符串,如果j为空,则直到串的尾部。其中,c1为一字符串,i、j为整数


二、数字类函数

ABS(n)  用于返回n的绝对值

ACOS(n) 反余弦函数

ASIN(n)  反正切函数

ATAN(n)  用于返回大于或等于n的最小整数

CEIL(n)   用于返回大于或等于n的最小整数

COS(n)   用于返回n的余弦值,n为弧度

COSH(n)  用于返回n的双曲余弦值,n为数字

EXP(n)  用于返回e的n次幂,e=2.71828183

FLOOR(n)  用于返回小于等于n的最大整数

LN(n) 用于返回n的自然对数,n必须大于0

LOG(n1,n2)  用于返回以n1为底n2的对数

MOD(n1,n2)  用于返回n1除以n2的余数

POWER(n1,n2)  用于返回n1的n2次方

ROUND(n1,n2)  传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果

SIGN()  若n为负数,则返回-1,若n为正数,则返回1,诺n=0,则返回0

SIN(n)   用于返回n的正弦值,n为弧度

SINH(n) 用于返回n的双曲正弦值,n为弧度

SQRT(n)  用于返回n的平方根,n为弧度

TAN(n)   用于返回n的正切值,n为弧度

TANH(n)  用于返回n的双曲正切值,n为弧度

TRUNC(n1,n2) TRUNC函数为指定元素而截去的日期值。


三、日期类函数

ADD_MONTHS(D,<I>)  返回日期d加上i个月后的结果

LAST_DAY(d)  返回包含日期d月份的最后一天

MONTHS_BETWEEN(d1,d2)  返回d1和d2之间月的数目

NEW_TIME(d1,tz1,tz2)   

SYSDATE  返回当前日期和时间,该函数没有参数


四、转换类函数

CHARTORWID(c1)  该函数将c1转换成RWID数据类型,其中c1是一个字符串

CONVERT(c1,dser[,sset])   该函数将字符串c1由sset字符集转换为dset字符集,sset默认设置为数据库的字符集,其中c1为字符串,dset,sset是两个字符集

ROWIDTOCHAR()   该函数将ROWID数据类型转换为CHAR数据类型

TO_CHAR(x[,fmt[n;sparm,]])  该函数将x转换成字符串

TO_DATE  获取时间

TO_MULTI_BYTE(c1) 该函数将c的单字节字符转换成多字节字符,其中c1表示一个字符串

TO_NUMBER(string[,format[,nlsparams]])  将CHAR或VARCHAR2类型的string转换为一个NUMBER类型的数值,如果指定了format,那么string应该遵循相应的数字格式。nlsparams的用来指定小数点和钱分位分隔符,以及货币符号。它与TO_CHAR()互为反函数

TO_SINGLE_BYTE(c1)   将字符串c1中的多字节字符转换成等价的单字节字符。该函数仅当数据库字符集同时包含单字节和多字节时才使用


五、聚合类函数

AVG(x[{DISTINCT|ALL}]) 用于返回数值的平均值。默认设置为ALL

COUNT(x[{DISTINCT|ALL}}])  用于返回查询中行的数目,默认设置是ALL,表示返回所有的行

MAX(x[{DISTINCT|ALL}}]) 用于返回查询列表最大值

MIN(x[{DISTINCT|ALL}}]) 用于返回选择列表项目的最小值

STDDEV(x[{DISTINCT|ALL}}])   用于返回选择列表项目的标准差,所谓的标准差是方差的平方根

SUM(x[{DISTINCT|ALL}}])   用于返回选择列表项目的数值的总和

VARIANCE(x[{DISTINCT|ALL}}])   用于返回选择列表项目的统计方差

<think>好的,用户现在问的是`torch.cuda.empty_cache()`是否只能清空一个GPU的缓存。我需要先回忆一下PyTorchCUDA内存管理的机制。 首先,用户之前遇到了关于Scikit-learn的分类指标警告和PyTorch的NCCL支持问题,现在转向了CUDA内存管理。可能用户正在处理多GPU训练,或者在单GPU使用中遇到了显存问题。 `torch.cuda.empty_cache()`的作用是释放当前由缓存分配器持有的未使用内存PyTorch默认情况下会缓存一部分内存以提高分配效率,这个函数可以释放那些未被使用的缓存内存。但用户的问题是,这个函数是否只影响当前的一个GPU。 根据PyTorch的文档,当使用多GPU时,每个GPU都有自己的缓存分配器。所以,如果用户有多个GPU,`torch.cuda.empty_cache()`只会释放当前设备(即通过`torch.cuda.current_device()`指定的那个)的缓存。要清空所有GPU的缓存,需要遍历每个设备,切换当前设备,然后分别调用该函数。 用户可能是在多GPU环境下运行代码,发现显存没有完全释放,或者遇到显存不足的问题。需要确认用户是否在使用多GPU,以及是否正确地切换了设备来清空每个GPU的缓存。 另外,用户可能对PyTorch内存管理机制不太熟悉,所以需要解释清楚这个函数的行为,以及在不同情况下的正确使用方法。可能还需要提醒用户,即使调用了这个函数,显存的释放也依赖于是否有未使用的缓存,实际使用的张量不会被释放。 最后,给出示例代码,说明如何为所有GPU清空缓存,并强调正确使用设备切换的重要性。还要提醒用户,显存管理需要结合其他方法,如手动删除变量、运行垃圾回收等,才能有效管理显存使用。</think>--- 在 PyTorch 中,`torch.cuda.empty_cache()` 的作用是释放当前 CUDA 设备(即当前选中的 GPU)的**未使用缓存内存**。其行为取决于 **GPU 设备的选择**和 **多 GPU 环境**的配置。以下是详细说明: --- ### **1.GPU 场景** - 如果你只有一个 GPU,或者代码中未显式指定 GPU 设备: `torch.cuda.empty_cache()` 会清空当前默认 GPU 的缓存内存。 例如: ```python import torch # 默认使用 GPU 0(仅单卡时) a = torch.randn(1000, 1000, device="cuda") # 占用显存 del a # 删除变量 torch.cuda.empty_cache() # 释放 GPU 0 的未使用缓存 ``` --- ### **2.GPU 场景** - 如果你有多个 GPU,且代码中显式切换了设备: 需要**依次选中每个 GPU 并单独调用** `empty_cache()`,才能清空所有 GPU 的缓存。 例如: ```python import torch # 清空 GPU 0 的缓存 torch.cuda.set_device(0) torch.cuda.empty_cache() # 清空 GPU 1 的缓存 torch.cuda.set_device(1) torch.cuda.empty_cache() ``` --- ### **3. 关键注意事项** 1. **缓存释放的范围**: `empty_cache()` **仅释放由 PyTorch 缓存分配器管理的未占用内存**,不会释放正在被张量占用的显存。 - 已分配的张量必须手动删除(如 `del tensor`)或超出作用域后,其显存才会被缓存分配器回收。 - 调用 `empty_cache()` 后,这些回收的内存才会真正释放回系统。 2. **多进程分布式训练**: 在分布式训练(如使用 `torch.distributed` 或 `DataParallel`)时,每个进程可能绑定到不同的 GPU。 - 每个进程需独立调用 `empty_cache()` 清理自己绑定的 GPU 缓存。 - 例如: ```python # 每个进程仅清理自己绑定的 GPU torch.cuda.empty_cache() ``` 3. **自动缓存管理**: PyTorch 默认会缓存部分显存以提高分配效率。频繁调用 `empty_cache()` 可能导致性能下降,建议仅在显存不足时手动调用。 --- ### **4. 验证显存释放** 可以使用 `torch.cuda.memory_summary()` 或以下代码查看显存状态: ```python import torch # 查看当前 GPU 的显存使用情况(单位:字节) print(torch.cuda.memory_allocated()) # 当前已分配的显存 print(torch.cuda.memory_reserved()) # 当前缓存分配器保留的显存(包括未使用的) ``` --- ### **总结** | 场景 | 行为 | |------------|----------------------------------------------------------------------| | **单 GPU** | 清空当前 GPU 的未使用缓存。 | | **多 GPU** | 需遍历所有 GPU,分别调用 `empty_cache()` 才能清空每个设备的缓存。 | --- ### **最佳实践** - 显存不足时手动调用 `empty_cache()`,但避免在循环中频繁使用。 - 结合显存监控工具(如 `nvidia-smi` 或 PyTorch 内置函数)诊断显存泄漏。 - 多 GPU 场景显式指定设备并分别清理: ```python for i in range(torch.cuda.device_count()): torch.cuda.set_device(i) torch.cuda.empty_cache() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值