* Replace underscores with hyphens * remove temporary code * fix style check * fix collapse
22 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 3e185d24c9 |
38 | Conversión de tipo |
Funciones De conversión De Tipos
Problemas Comunes De Conversiones numéricas
Cuando convierte un valor de uno a otro tipo de datos, debe recordar que, en un caso común, es una operación insegura que puede provocar una pérdida de datos. Puede producirse una pérdida de datos si intenta ajustar el valor de un tipo de datos más grande a un tipo de datos más pequeño, o si convierte valores entre diferentes tipos de datos.
ClickHouse tiene el mismo comportamiento que los programas de C++.
¿Cómo puedo obtener más información?)
Convierte un valor de entrada en el En tipo de datos. Esta familia de funciones incluye:
toInt8(expr)
— Results in theInt8
tipo de datos.toInt16(expr)
— Results in theInt16
tipo de datos.toInt32(expr)
— Results in theInt32
tipo de datos.toInt64(expr)
— Results in theInt64
tipo de datos.
Parámetros
expr
— Expresion devolviendo un número o una cadena con la representación decimal de un número. No se admiten representaciones binarias, octales y hexadecimales de números. Los ceros principales son despojados.
Valor devuelto
Valor entero en el Int8
, Int16
, Int32
, o Int64
tipo de datos.
Funciones de uso redondeando hacia cero, lo que significa que truncan dígitos fraccionarios de números.
El comportamiento de las funciones NaN y Inf los argumentos no están definidos. Recuerde acerca de problemas de conversión numérica, al usar las funciones.
Ejemplo
SELECT toInt64(nan), toInt32(32), toInt16('16'), toInt8(8.8)
┌─────────toInt64(nan)─┬─toInt32(32)─┬─toInt16('16')─┬─toInt8(8.8)─┐
│ -9223372036854775808 │ 32 │ 16 │ 8 │
└──────────────────────┴─────────────┴───────────────┴─────────────┘
¿Cómo puedo obtener más información?
Toma un argumento de tipo String e intenta analizarlo en Int (8 | 16 | 32 | 64). Si falla, devuelve 0.
Ejemplo
select toInt64OrZero('123123'), toInt8OrZero('123qwe123')
┌─toInt64OrZero('123123')─┬─toInt8OrZero('123qwe123')─┐
│ 123123 │ 0 │
└─────────────────────────┴───────────────────────────┘
¿Cómo puedo hacerlo?
Toma un argumento de tipo String e intenta analizarlo en Int (8 | 16 | 32 | 64). Si falla, devuelve NULL.
Ejemplo
select toInt64OrNull('123123'), toInt8OrNull('123qwe123')
┌─toInt64OrNull('123123')─┬─toInt8OrNull('123qwe123')─┐
│ 123123 │ ᴺᵁᴸᴸ │
└─────────────────────────┴───────────────────────────┘
¿Cómo puedo obtener más información?)
Convierte un valor de entrada en el UInt tipo de datos. Esta familia de funciones incluye:
toUInt8(expr)
— Results in theUInt8
tipo de datos.toUInt16(expr)
— Results in theUInt16
tipo de datos.toUInt32(expr)
— Results in theUInt32
tipo de datos.toUInt64(expr)
— Results in theUInt64
tipo de datos.
Parámetros
expr
— Expresion devolviendo un número o una cadena con la representación decimal de un número. No se admiten representaciones binarias, octales y hexadecimales de números. Los ceros principales son despojados.
Valor devuelto
Valor entero en el UInt8
, UInt16
, UInt32
, o UInt64
tipo de datos.
Funciones de uso redondeando hacia cero, lo que significa que truncan dígitos fraccionarios de números.
El comportamiento de las funciones para los instrumentos negativos y para NaN y Inf los argumentos no están definidos. Si pasa una cadena con un número negativo, por ejemplo '-32'
, ClickHouse genera una excepción. Recuerde acerca de problemas de conversión numérica, al usar las funciones.
Ejemplo
SELECT toUInt64(nan), toUInt32(-32), toUInt16('16'), toUInt8(8.8)
┌───────toUInt64(nan)─┬─toUInt32(-32)─┬─toUInt16('16')─┬─toUInt8(8.8)─┐
│ 9223372036854775808 │ 4294967264 │ 16 │ 8 │
└─────────────────────┴───────────────┴────────────────┴──────────────┘
¿Cómo puedo obtener más información?
¿Cómo puedo hacerlo?
¿Cómo puedo obtener más información?)
¿Cómo puedo hacerlo?
¿Cómo puedo hacerlo?
Fecha
Todos Los Derechos Reservados
ToDateOrNull
toDateTime
ToDateTimeOrZero
ToDateTimeOrNull
toDecimal(32/64/128)
Convertir value
a la Decimal tipo de datos con precisión de S
. El value
puede ser un número o una cadena. El S
(escala) parámetro especifica el número de decimales.
toDecimal32(value, S)
toDecimal64(value, S)
toDecimal128(value, S)
¿Cómo puedo hacer esto?
Convierte una cadena de entrada en un Información detallada)) valor de tipo de datos. Esta familia de funciones incluye:
toDecimal32OrNull(expr, S)
— Results inNullable(Decimal32(S))
tipo de datos.toDecimal64OrNull(expr, S)
— Results inNullable(Decimal64(S))
tipo de datos.toDecimal128OrNull(expr, S)
— Results inNullable(Decimal128(S))
tipo de datos.
Estas funciones deben usarse en lugar de toDecimal*()
funciones, si usted prefiere conseguir un NULL
valor de entrada en lugar de una excepción en el caso de un error de análisis de valor de entrada.
Parámetros
expr
— Expresion, devuelve un valor en el Cadena tipo de datos. ClickHouse espera la representación textual del número decimal. Por ejemplo,'1.111'
.S
— Scale, the number of decimal places in the resulting value.
Valor devuelto
Un valor en el Nullable(Decimal(P,S))
tipo de datos. El valor contiene:
- Número con
S
lugares decimales, si ClickHouse interpreta la cadena de entrada como un número. NULL
, si ClickHouse no puede interpretar la cadena de entrada como un número o si el número de entrada contiene más deS
lugares decimales.
Ejemplos
SELECT toDecimal32OrNull(toString(-1.111), 5) AS val, toTypeName(val)
┌──────val─┬─toTypeName(toDecimal32OrNull(toString(-1.111), 5))─┐
│ -1.11100 │ Nullable(Decimal(9, 5)) │
└──────────┴────────────────────────────────────────────────────┘
SELECT toDecimal32OrNull(toString(-1.111), 2) AS val, toTypeName(val)
┌──val─┬─toTypeName(toDecimal32OrNull(toString(-1.111), 2))─┐
│ ᴺᵁᴸᴸ │ Nullable(Decimal(9, 2)) │
└──────┴────────────────────────────────────────────────────┘
Por Ejemplo:
Convierte un valor de entrada en el Decimal (P, S) tipo de datos. Esta familia de funciones incluye:
toDecimal32OrZero( expr, S)
— Results inDecimal32(S)
tipo de datos.toDecimal64OrZero( expr, S)
— Results inDecimal64(S)
tipo de datos.toDecimal128OrZero( expr, S)
— Results inDecimal128(S)
tipo de datos.
Estas funciones deben usarse en lugar de toDecimal*()
funciones, si usted prefiere conseguir un 0
valor de entrada en lugar de una excepción en el caso de un error de análisis de valor de entrada.
Parámetros
expr
— Expresion, devuelve un valor en el Cadena tipo de datos. ClickHouse espera la representación textual del número decimal. Por ejemplo,'1.111'
.S
— Scale, the number of decimal places in the resulting value.
Valor devuelto
Un valor en el Nullable(Decimal(P,S))
tipo de datos. El valor contiene:
- Número con
S
lugares decimales, si ClickHouse interpreta la cadena de entrada como un número. - 0 con
S
decimales, si ClickHouse no puede interpretar la cadena de entrada como un número o si el número de entrada contiene más deS
lugares decimales.
Ejemplo
SELECT toDecimal32OrZero(toString(-1.111), 5) AS val, toTypeName(val)
┌──────val─┬─toTypeName(toDecimal32OrZero(toString(-1.111), 5))─┐
│ -1.11100 │ Decimal(9, 5) │
└──────────┴────────────────────────────────────────────────────┘
SELECT toDecimal32OrZero(toString(-1.111), 2) AS val, toTypeName(val)
┌──val─┬─toTypeName(toDecimal32OrZero(toString(-1.111), 2))─┐
│ 0.00 │ Decimal(9, 2) │
└──────┴────────────────────────────────────────────────────┘
ToString
Funciones para convertir entre números, cadenas (pero no cadenas fijas), fechas y fechas con horas. Todas estas funciones aceptan un argumento.
Al convertir a o desde una cadena, el valor se formatea o se analiza utilizando las mismas reglas que para el formato TabSeparated (y casi todos los demás formatos de texto). Si la cadena no se puede analizar, se lanza una excepción y se cancela la solicitud.
Al convertir fechas a números o viceversa, la fecha corresponde al número de días desde el comienzo de la época Unix. Al convertir fechas con horas a números o viceversa, la fecha con hora corresponde al número de segundos desde el comienzo de la época Unix.
Los formatos de fecha y fecha con hora para las funciones toDate/toDateTime se definen de la siguiente manera:
YYYY-MM-DD
YYYY-MM-DD hh:mm:ss
Como excepción, si convierte de tipos numéricos UInt32, Int32, UInt64 o Int64 a Date, y si el número es mayor o igual que 65536, el número se interpreta como una marca de tiempo Unix (y no como el número de días) y se redondea a la fecha. Esto permite soporte para la ocurrencia común de la escritura ‘toDate(unix_timestamp)’, que de otra manera sería un error y requeriría escribir el más engorroso ‘toDate(toDateTime(unix_timestamp))’.
La conversión entre una fecha y una fecha con la hora se realiza de la manera natural: agregando un tiempo nulo o eliminando el tiempo.
La conversión entre tipos numéricos utiliza las mismas reglas que las asignaciones entre diferentes tipos numéricos en C++.
Además, la función toString del argumento DateTime puede tomar un segundo argumento String que contiene el nombre de la zona horaria. Ejemplo: Asia/Yekaterinburg
En este caso, la hora se formatea de acuerdo con la zona horaria especificada.
SELECT
now() AS now_local,
toString(now(), 'Asia/Yekaterinburg') AS now_yekat
┌───────────now_local─┬─now_yekat───────────┐
│ 2016-06-15 00:11:21 │ 2016-06-15 02:11:21 │
└─────────────────────┴─────────────────────┘
Ver también el toUnixTimestamp
función.
¿Qué puedes encontrar en Neodigit)
Convierte un argumento de tipo String en un tipo FixedString(N) (una cadena con longitud fija N). N debe ser una constante. Si la cadena tiene menos bytes que N, se pasa con bytes nulos a la derecha. Si la cadena tiene más bytes que N, se produce una excepción.
Todos Los Derechos Reservados.)
Acepta un argumento String o FixedString. Devuelve la cadena con el contenido truncado en el primer byte cero encontrado.
Ejemplo:
SELECT toFixedString('foo', 8) AS s, toStringCutToZero(s) AS s_cut
┌─s─────────────┬─s_cut─┐
│ foo\0\0\0\0\0 │ foo │
└───────────────┴───────┘
SELECT toFixedString('foo\0bar', 8) AS s, toStringCutToZero(s) AS s_cut
┌─s──────────┬─s_cut─┐
│ foo\0bar\0 │ foo │
└────────────┴───────┘
¿Cómo puedo obtener más información?)
¿Cómo puedo obtener más información?)
¿Cómo puedo obtener más información?)
reinterpretAsDate
reinterpretAsDateTime
Estas funciones aceptan una cadena e interpretan los bytes colocados al principio de la cadena como un número en orden de host (little endian). Si la cadena no es lo suficientemente larga, las funciones funcionan como si la cadena estuviera rellenada con el número necesario de bytes nulos. Si la cadena es más larga de lo necesario, se ignoran los bytes adicionales. Una fecha se interpreta como el número de días desde el comienzo de la época Unix, y una fecha con hora se interpreta como el número de segundos desde el comienzo de la época Unix.
reinterpretAsString
Esta función acepta un número o fecha o fecha con hora, y devuelve una cadena que contiene bytes que representan el valor correspondiente en orden de host (little endian). Los bytes nulos se eliminan desde el final. Por ejemplo, un valor de tipo UInt32 de 255 es una cadena que tiene un byte de longitud.
reinterpretAsFixedString
Esta función acepta un número o fecha o fecha con hora, y devuelve un FixedString que contiene bytes que representan el valor correspondiente en orden de host (little endian). Los bytes nulos se eliminan desde el final. Por ejemplo, un valor de tipo UInt32 de 255 es un FixedString que tiene un byte de longitud.
CAST(x, T)
Convertir ‘x’ a la ‘t’ tipo de datos. La sintaxis CAST(x AS t) también es compatible.
Ejemplo:
SELECT
'2016-06-15 23:00:00' AS timestamp,
CAST(timestamp AS DateTime) AS datetime,
CAST(timestamp AS Date) AS date,
CAST(timestamp, 'String') AS string,
CAST(timestamp, 'FixedString(22)') AS fixed_string
┌─timestamp───────────┬────────────datetime─┬───────date─┬─string──────────────┬─fixed_string──────────────┐
│ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00\0\0\0 │
└─────────────────────┴─────────────────────┴────────────┴─────────────────────┴───────────────────────────┘
La conversión a FixedString(N) solo funciona para argumentos de tipo String o FixedString(N).
Conversión de tipo a NULL y la espalda es compatible. Ejemplo:
SELECT toTypeName(x) FROM t_null
┌─toTypeName(x)─┐
│ Int8 │
│ Int8 │
└───────────────┘
SELECT toTypeName(CAST(x, 'Nullable(UInt16)')) FROM t_null
┌─toTypeName(CAST(x, 'Nullable(UInt16)'))─┐
│ Nullable(UInt16) │
│ Nullable(UInt16) │
└─────────────────────────────────────────┘
toInterval(Year|Quarter|Month|Week|Day|Hour|Minute|Second)
Convierte un argumento de tipo Number en un Intervalo tipo de datos.
Sintaxis
toIntervalSecond(number)
toIntervalMinute(number)
toIntervalHour(number)
toIntervalDay(number)
toIntervalWeek(number)
toIntervalMonth(number)
toIntervalQuarter(number)
toIntervalYear(number)
Parámetros
number
— Duration of interval. Positive integer number.
Valores devueltos
- El valor en
Interval
tipo de datos.
Ejemplo
WITH
toDate('2019-01-01') AS date,
INTERVAL 1 WEEK AS interval_week,
toIntervalWeek(1) AS interval_to_week
SELECT
date + interval_week,
date + interval_to_week
┌─plus(date, interval_week)─┬─plus(date, interval_to_week)─┐
│ 2019-01-08 │ 2019-01-08 │
└───────────────────────────┴──────────────────────────────┘
parseDateTimeBestEffort
Convierte una fecha y una hora en el Cadena representación a FechaHora tipo de datos.
La función analiza ISO 8601, RFC 1123 - 5.2.14 RFC-822 Especificación de fecha y hora, ClickHouse y algunos otros formatos de fecha y hora.
Sintaxis
parseDateTimeBestEffort(time_string [, time_zone]);
Parámetros
time_string
— String containing a date and time to convert. Cadena.time_zone
— Time zone. The function parsestime_string
según la zona horaria. Cadena.
Formatos no estándar admitidos
- Una cadena que contiene 9..10 dígitos marca de tiempo unix.
- Una cadena con un componente de fecha y hora:
YYYYMMDDhhmmss
,DD/MM/YYYY hh:mm:ss
,DD-MM-YY hh:mm
,YYYY-MM-DD hh:mm:ss
, sucesivamente. - Una cadena con una fecha, pero sin componente de hora:
YYYY
,YYYYMM
,YYYY*MM
,DD/MM/YYYY
,DD-MM-YY
sucesivamente. - Una cadena con un día y una hora:
DD
,DD hh
,DD hh:mm
. En este casoYYYY-MM
se sustituyen como2000-01
. - Una cadena que incluye la fecha y la hora junto con la información de desplazamiento de zona horaria:
YYYY-MM-DD hh:mm:ss ±h:mm
, sucesivamente. Por ejemplo,2020-12-12 17:36:00 -5:00
.
Para todos los formatos con separador, la función analiza los nombres de meses expresados por su nombre completo o por las primeras tres letras de un nombre de mes. Ejemplos: 24/DEC/18
, 24-Dec-18
, 01-September-2018
.
Valor devuelto
time_string
convertido a laDateTime
tipo de datos.
Ejemplos
Consulta:
SELECT parseDateTimeBestEffort('12/12/2020 12:12:57')
AS parseDateTimeBestEffort;
Resultado:
┌─parseDateTimeBestEffort─┐
│ 2020-12-12 12:12:57 │
└─────────────────────────┘
Consulta:
SELECT parseDateTimeBestEffort('Sat, 18 Aug 2018 07:22:16 GMT', 'Europe/Moscow')
AS parseDateTimeBestEffort
Resultado:
┌─parseDateTimeBestEffort─┐
│ 2018-08-18 10:22:16 │
└─────────────────────────┘
Consulta:
SELECT parseDateTimeBestEffort('1284101485')
AS parseDateTimeBestEffort
Resultado:
┌─parseDateTimeBestEffort─┐
│ 2015-07-07 12:04:41 │
└─────────────────────────┘
Consulta:
SELECT parseDateTimeBestEffort('2018-12-12 10:12:12')
AS parseDateTimeBestEffort
Resultado:
┌─parseDateTimeBestEffort─┐
│ 2018-12-12 10:12:12 │
└─────────────────────────┘
Consulta:
SELECT parseDateTimeBestEffort('10 20:19')
Resultado:
┌─parseDateTimeBestEffort('10 20:19')─┐
│ 2000-01-10 20:19:00 │
└─────────────────────────────────────┘
Ver también
-
ISO 8601 announcement by @xkcd
- RFC 1123
- Fecha
- toDateTime
parseDateTimeBestEffortOrNull
Lo mismo que para parseDateTimeBestEffort excepto que devuelve null cuando encuentra un formato de fecha que no se puede procesar.
parseDateTimeBestEffortOrZero
Lo mismo que para parseDateTimeBestEffort excepto que devuelve una fecha cero o una fecha cero cuando encuentra un formato de fecha que no se puede procesar.