获取位大小的价值

时间:2019-02-27 16:51:30

标签: sql sql-server oracle

在SQL Server和Oracle中,是否可以获取该值的位大小?

我知道一个int占用4个字节的存储空间,而一个nvarchar(n)存储2倍n字节+ 2个字节的存储空间,但是我只对实际值感兴趣。

例如,如果我想检查具有不同数据类型的整行,是否可以获取每个实际值的位大小?

SQL Server函数DATALENGTH()是否可以以通用方式应用,而不取决于数据类型?

1 个答案:

答案 0 :(得分:0)

在Oracle中,DUMP命令的输出将包括实际值的长度(以字节为单位)。然后,您可以使用字符串函数将长度拉出输出。例如,

select dump(3.141592), 
       regexp_substr(dump(3.141592),'Len=([0-9]+)',1,1,'i',1) byte_length
from dual 
+-----------------------------+-------------+
|       DUMP(3.141592)        | BYTE_LENGTH |
+-----------------------------+-------------+
| Typ=2 Len=5: 193,4,15,16,93 |           5 |
+-----------------------------+-------------+

您需要对每一列进行此操作并将其加起来。

此外,请注意,Oracle在计算(或估计)该表的统计信息时会计算(或估计)该表中数据的平均行长度。结果进入DBA_TABLES.AVG_ROW_LEN