在SQL Server和Oracle中,是否可以获取该值的位大小?
我知道一个int占用4个字节的存储空间,而一个nvarchar(n)存储2倍n字节+ 2个字节的存储空间,但是我只对实际值感兴趣。
例如,如果我想检查具有不同数据类型的整行,是否可以获取每个实际值的位大小?
SQL Server函数DATALENGTH()是否可以以通用方式应用,而不取决于数据类型?
答案 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
。