0

我正在尝试从 INFORMATION_SCHEMA.COLUMNS 表中的 MS SQL 获取最大允许的列长度(表示中的字符数,而不是字节数)。我发现 CHARACTER_MAXIMUM_LENGTH 对于数字和日期时间类型可以为 NULL。我还在 INFORMATION_SCHEMA.COLUMNS 表中找到了三个以下列:

  1. NUMERIC_PRECISION;
  2. NUMERIC_SCALE(与 NUMERIC_PRECISION 相关);
  3. DATETIME_PRECISION;

据我了解,总是至少存在一个非 NULL 值的列,因此我们可以使用这些列来获得最大长度。我找不到有关此列用法的明确说明。例如,假设我的日期时间类型的 DATETIME_PRECISION 等于 3,我如何仅使用 INFORMATION_SCHEMA 表从“3”计算字符数?

4

3 回答 3

0

如果您查看链接,您可以单击数据类型,如果它是字符串等,它将告诉您最大长度。数据类型大小

示例:DateTime:字符长度最少 19 个位置到最多 23 个位置

于 2013-07-25T07:33:50.187 回答
0

你不能。原因是 datetime 列不存储字符,它们存储日期和时间的二进制表示。与所有相关的字符数取决于您如何格式化该日期时间。如果您将其格式化为“yyyy/MM/dd”,那么它将是 10 个字符。但是,如果您将其格式化为 .ToLongDateString(); 然后会根据您机器上设置的文化和语言而有所不同。

ToLongDateString() 为提供的文化/语言返回以下值:

en-us: 2009 年 12 月 5 日星期六 fr-fr: samedi 2009 年 12 月 5 日 es-es: sábado, 05 de diciembre de 2009

于 2013-07-25T07:40:24.307 回答
0

问题: “假设我的日期时间类型的 DATETIME_PRECISION 等于 3,我如何仅使用 INFORMATION_SCHEMA 表从 '3' 计算字符数?”

答案: 24 (基于一些合理的假设)

为什么?

首先,“3”表示该列最多存储千分之一秒。

其次,我完全同意@CamW 的回答,即字符数取决于您如何格式化日期时间。因此,正如他所指出的,您无法从您提供的信息中真正计算出字符数。

然而,第三,让我们走得更远一点。对日期时间列的值使用ISO 8601格式似乎是合理的。因此,为了获得更全面的答案,我们假设:

  • 你所有的日期都在 1000 到 9999 年之间,包括在内,
  • 您将把您的日期时间显示为UTC(而不是像您自己的某个特定时区),
  • 您将使用 Javascript Date.prototype 使用的分隔符。toISOString () 方法。

有了这些假设,您在列中表示任何值的字符数将为 24。

要了解原因,让我们将您提出问题的日期时间放入该格式。

2013-07-25T07:28:06.000Z    // when you asked your question

123456789012345678901234    // ruler (number of characters)
         1         2        // 

YYYY-MM-DDTHH:mm:ss.sssZ    // representation with specifiers

也许巧合的是,您示例中的“3”与标准 Javascript ISO 8601 日期表示中的精度相匹配:达到千分之一秒。如果您的日期精度为“4”,那么将可用精度显示到千分之一秒的类似表示将是 25 个字符长。“5” = 26。以此类推。

于 2016-06-04T19:07:28.053 回答