Questions tagged «datatypes»

指定要存储的数据类型(字符串,日期,数字等)。

2
用于存储标志数组(位图/位数组)的数据类型
我需要为表的每个记录存储一个位数组,以支持以下操作: 测试是否设置了一个位,并设置了一个位(使用SQL) 使用ADO 2.8(而非ADO.NET)查询和设置值 索引编制(为了从“覆盖索引”功能中受益) 此数组中要存储的最大位数是固定的,但可以超过32。也就是说,简单的int列并不总是有效。 到目前为止,我的选择是: 使用多个int列 使用bigint(只要位数小于等于64即可工作) 使用二进制 ? 第一个选项可以工作,但是需要在访问数据的代码中进行大量重构。第二种选择只是暂时的解决方案,到目前为止,根据我的搜索,我不太确定ADO是否可以与bigint一起使用。我没有使用binary的经验,并且不知道其他任何选项。 根据要求,您会选择哪种数据类型?


2
为什么“ SELECT POWER(10.0,38.0);”会引发算术溢出错误?
我正在更新我的IDENTITY溢出检查脚本以解决DECIMAL和NUMERIC IDENTITY列。 作为检查的一部分,我计算了每一IDENTITY列的数据类型范围的大小。我用它来计算该范围已用尽的百分比。对于DECIMAL与NUMERIC 该范围的大小2 * 10^p - 2,其中p是精度。 我用DECIMALand NUMERIC IDENTITY列创建了一堆测试表,并尝试如下计算它们的范围: SELECT POWER(10.0, precision) FROM sys.columns WHERE is_identity = 1 AND type_is_decimal_or_numeric ; 这引发了以下错误: Msg 8115, Level 16, State 6, Line 1 Arithmetic overflow error converting float to data type numeric. 我将其范围缩小到IDENTITY类型的列DECIMAL(38, 0)(即,具有最大精度),因此我POWER()直接尝试对该值进行计算。 以下所有查询 SELECT POWER(10.0, 38.0); SELECT CONVERT(FLOAT, (POWER(10.0, …

2
SQL Server十进制(9,0)与INT
我们的一位客户使用DECIMAL(18,0)他的SQL Server 2008R2数据库中的数据类型作为某些列。由于列的增长非常缓慢,因此他最近提议更改数据类型DECIMAL(5,0)以重新获得一些存储空间。 根据MSDN库,与DECIMAL(5,0)数据类型一样,DECIMAL(9,0)数据类型的存储空间为5个字节。INT是小1个字节,但可以存储-2 ^ 31到2 ^ 31范围内的所有内容,而不是DECIMAL(5,0)可以存储的-99,999到99,999 。即使是最大的DECIMAL5个字节(DECIMAL(9,0)),也只能存储-999,999,999到999,999,999(小于范围的一半)范围内的整数INT 4字节)。 我可以想到使用DECIMALover 的两个“好处” INT: 之后可以增加规模,而无需使用更多的存储空间 可以将精度扩展到38位,而无需更改数据类型 但是我认为这些并不是真正的好处: 将比例添加到整数仅在极少数情况下才有意义(在大多数情况下比例确实有所不同,也可以预先添加) SQL Server将每个精度/小数位组合视为不同的数据类型,因此在提高精度或小数位时,不会单独保留数据类型。 这让我想知道:DECIMAL(5,0)整数数据类型的附加好处是什么?

4
检测NVARCHAR列中的任何值是否实际上是unicode
我继承了一些SQL Server数据库。SQL Server 2014 Standard的源数据库(我称为“ Q”)中有一张表(我称为“ G”),约有8670万行,宽41列,可将ETL转换为在SQL Server 2008 R2 Standard上具有相同表名的目标数据库(我称其为“ P”)。 即[Q]。[G] ---> [P]。[G] 编辑:3/20/2017:有人问源表是否是目标表的唯一源。是的,这是唯一的来源。就ETL而言,没有任何真正的变化发生。它实际上是源数据的1:1副本。因此,没有计划向此目标表添加其他源。 [Q]。[G]中的一半以上的列是VARCHAR(源表): 列中的13个是VARCHAR(80) 9列是VARCHAR(30) 列中的2个是VARCHAR(8)。 同样,[P]。[G]中的相同列是NVARCHAR(目标表),具有相同宽度的相同列数。(换句话说,长度相同,但为NVARCHAR)。 列中的13个是NVARCHAR(80) 9列是NVARCHAR(30) 列中的2个是NVARCHAR(8)。 这不是我的设计。 我想更改[P]。[G](目标)列数据类型,从NVARCHAR到VARCHAR。我想安全地做到这一点(不会因转换而丢失数据)。 如何查看目标表中每个NVARCHAR列中的数据值,以确认该列是否实际包含任何Unicode数据? 可以检查每个NVARCHAR列的每个值(循环吗?)并告诉我其中的任何值是否为Unicode的查询(DMVs?)是理想的解决方案,但欢迎使用其他方法。


2
是否有“自定义数据类型”之类的东西?
MySQL是否支持自定义数据类型?例如,邮政编码可以存储在一个varchar(10)字段中,但可以压缩为一个int,其中带有空白选项,并带有一个有关5位或5 + 4位邮政编码的标志。 有没有办法为这些事情安装无缝数据类型?就应用程序而言,它将是字符串类型,如果应用程序传递了无效数据,则将只是数据截断(带有或不带有警告)。 可以使用自定义函数(例如,有一个INET_ATON用于IPv4地址的内置函数。但这不允许zip LIKE '12345%'进行正确索引的事情。对自定义数据类型的良好书写支持将允许标记数据类型因此,紧凑型zip int在排序时会像是一样进行排序zip varchar(10)。 这将允许该列为固定宽度,这将允许将6或10字节的变量存储空间缩减为4 byby固定宽度。 有几种适用的用途 邮递区号 IPv6地址 自定义时间戳字段,具有分钟级别的精度和容量2038,且存储使用量少于datetime,但无需支持实施年份之前的日期(例如,如果这些日期是系统中最早的日期,则最小值可以是2007年) 实现DST的时间戳(似乎不存在) 两个字母的美国状态可以存储在一个字节中 ENUM可以将long s分隔为自定义数据类型,这样,DESCRIBE在所有包装中,输出都不会显得那么混乱。 我希望数据类型处理程序的存储方式类似于函数的存储方式。 任何数据库引擎上是否都存在类似的远程功能?我主要使用MySQL,但是我很好奇它是否曾经实现过,没有让应用程序调用类似于INET_ATON函数的函数。 MS SQL确实具有这种性质,但是我想知道它是否仅仅是同义词。(例如,boolean可以是tinyint(1)或或或或postal_code之一的同义词)同义词不是我要问的。charvarchar (5910)

1
如何在PostgreSQL中存储一字节整数?
在PostgreSQL文档中,据说整数数据类型可以存储在2字节,4字节或8字节的空间中。数据库中表的一列包含一个一字节的整数值,我希望将其存储为一字节的数据类型。 在PostgreSQL中是否有扩展或使用一字节整数数据类型的方法? NUMERIC(1,0)是多少个字节?

4
电话号码的数据类型:VARCHAR,INT或BIGINT?
因此,这将是今年的虚拟问题,但我要问的是,这不是我第一次通过此问题。看一下下表定义: 看一下当前的专栏from_number,VARCHAR(45)但其中包含电话号码。由于我不知道手机在世界范围内可能有多少个号码,因此我尝试涵盖几乎所有号码。我想尽可能地保持数据库的完整性,所以我认为VARCHAR这不是保存此类信息的合适类型-也许我错了,你告诉我-所以我在考虑更改INT甚至更改BIGINT。 当我在Workbench中定义列时,我不应该()在所有情况下都指定括号之间的数字,而在我之前提到的情况下,则必须指定括号中的数字。因此,如果执行此操作:BIGINT()我收到此错误: 这使我在这里阅读了有关此MySQL类型的一些信息。基本上信息是这样的: 一个大整数。...无符号范围是0到18446744073709551615。 这让我问:定义BIGINT()类型时应为括号设置什么值。(我正在使用BIGINT,因为我不知道INT是否可以容纳电话所能容纳的尽可能多的数字-也许我也是错的)。在MariaDB / MySQL数据库中创建|设计列的正确方法是什么? 无论如何,我想知道您的意见,经验,当然我想得到一个答案 注意:我正在使用MySQL Workbench最新版本来创建ER图。我也在使用MariaDB 10.0.x

3
MySQL数据类型为128位整数
我需要将128位无符号整数存储到MySQL中,我想知道什么是存储如此大数字的最佳数据类型。 现在,我正在使用,binary(16)但这涉及很多转换功能pack(/huge number in hex .../)。 有没有最好的数据类型来存储128位无符号整数?
12 mysql  datatypes 

1
SQL Server查询计划XML:QueryPlanHash长度
更新:这绝对是一个错误。有关详细信息,请参见此连接项。 在测试对sp_BlitzCache的一些更改(完整披露,我是作者之一)时,我遇到了我认为是代码中的错误的地方。 一方面,我们要匹配查询计划哈希以获取查询成本。我们这样做是这样的: statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) = xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float') 据我所知,这已经奏效了。但是,在一种奇怪的情况下,XML中的子字符串引发了一个NULL值,尽管成本很高,但该计划的成本却显示为0。 深入研究执行计划(全面披露,我在负责Paste The Plan的公司工作),我注意到一个问题哈希的“查询计划哈希”长为17个字符,其余为18个字符。以下示例: QueryPlanHash =“ 0x4410B0CA640CDA89” QueryPlanHash =“ 0x2262FEA4CE645569” QueryPlanHash =“ 0xED4F225CC0E97E5” –问题! QueryPlanHash =“ 0xBF878EEE6DB955EA” QueryPlanHash =“ 0x263B53BC8C14A452” QueryPlanHash =“ 0x89F5F146CF4B476F” QueryPlanHash =“ 0xEF47EA40805C8961” QueryPlanHash =“ 0xB7BE27D6E43677A5” QueryPlanHash =“ 0x815C54EC43A6A6E9” 查询计划哈希上市为BINARY 8-想必这应该是相同的长度,但到底是什么像我这样的人了解二进制值? 稍微玩一下XQuery,我发现通过将子字符串更改为从第二个位置开始,它会得出一个有效的(尽管不正确)哈希值。 WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p) SELECT QueryPlanCost = …

2
PostgreSQL:将表作为函数中的参数传递
我TYPE在PostgreSQL中发现。我有TABLE TYPE一些表必须尊重(接口)。例如: CREATE TYPE dataset AS( ChannelId INTEGER ,GranulityIdIn INTEGER ,GranulityId INTEGER ,TimeValue TIMESTAMP ,FloatValue FLOAT ,Status BIGINT ,QualityCodeId INTEGER ,DataArray FLOAT[] ,DataCount BIGINT ,Performance FLOAT ,StepCount INTEGER ,TableRegClass regclass ,Tags TEXT[] ,WeightedMean FLOAT ,MeanData FLOAT ,StdData FLOAT ,MinData FLOAT ,MaxData FLOAT ,MedianData FLOAT ,Percentiles FLOAT[] ); 我可以使用以下模板创建表格: CREATE TABLE …

1
使用CEILING时,CASE表达式返回错误的值
我遇到了一个问题,就是CASE表达式无法返回我期望的结果。 作为测试,我添加了一个十进制变量并对它运行相同的CASE表达式,它运行良好,返回的结果与我期望的一样(将值四舍五入IsGun=1。但是当我CASE对另一个十进制值运行相同的表达式时,它总是返回CEILING()函数的值,并且永远不会返回原始值。 这是SQL代码: DECLARE @Num decimal(8,2); set @Num = 12.54; WITH PQ AS ( SELECT UPC, Price1, DBID, AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg FROM vProducts_PriceQty_Union ) SELECT PQ.UPC, PQ.Price1, PQ.Price1Avg, (CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar, CAST( (CASE WHEN P.IsGun = 1 …

1
使用类型修饰符的数据类型的结果令人惊讶
在讨论此问题的递归CTE解决方案时: 获取每个ID的最后5个不同的值 @ypercube偶然发现了一个令人惊讶的异常,这使我们研究了类型修饰符的处理。我们发现了令人惊讶的行为。 1.类型转换在某些情况下保留类型修饰符 即使指示不要这样做。最基本的例子: SELECT 'vc8'::varchar(8)::varchar varchar至少我会期望(没有修饰符)。但是结果是varchar(8)(带有修饰符)。在下面的小提琴中有许多相关案例。 2.数组串联在某些情况下会丢失类型修饰符 不需要,因此在另一侧犯了错误: SELECT ARRAY['vc8']::varchar(8)[] , ARRAY['vc8']::varchar(8)[] || 'vc8'::varchar(8) 第一个表达式产生varchar(8)[]预期的效果。 但是第二个,在连接另一个之后,varchar(8)会减少到varchar[](无修饰符)。array_append()以下小提琴中的示例提供类似的行为。 在大多数情况下,所有这些都无关紧要。Postgres不会丢失数据,并且当分配给列时,无论如何该值都被强制为正确的类型。但是,在相反方向上的错误最终导致一个令人惊讶的异常: 3.递归CTE要求数据类型完全匹配 给出此简化表: CREATE TABLE a ( vc8 varchar(8) -- with modifier , vc varchar -- without ); INSERT INTO a VALUES ('a', 'a'), ('bb', 'bb'); 尽管此rCTE适用于该varchar列vc,但不适用于该varchar(8)列vc8: WITH RECURSIVE cte AS ( …

1
为什么10 ^ 37/1会引发算术溢出错误?
继续我最近玩大量数字的趋势,我最近将错误归结为以下代码: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; 我得到的这段代码的输出是: 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. 什么? 为什么前三个操作有效,但最后一个无效?如果@big_number可以明显地存储的输出,怎么会有算术溢出错误@big_number / 1?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.