日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

數(shù)據(jù)類(lèi)型轉(zhuǎn)換

更新時(shí)間:

MaxCompute SQL允許數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換,類(lèi)型轉(zhuǎn)換方式包括顯式類(lèi)型轉(zhuǎn)換和隱式類(lèi)型轉(zhuǎn)換。

顯式類(lèi)型轉(zhuǎn)換

顯式類(lèi)型轉(zhuǎn)換是通過(guò)CAST函數(shù)將一種數(shù)據(jù)類(lèi)型的值轉(zhuǎn)換為另一種類(lèi)型的值,在MaxCompute SQL中支持的顯式類(lèi)型轉(zhuǎn)換,如下表所示。 關(guān)于CAST的介紹請(qǐng)參見(jiàn)CAST

From/To

BIGINT

DOUBLE

STRING

DATETIME

BOOLEAN

DECIMAL

FLOAT

BIGINT

不涉及

Y

Y

N

Y

Y

Y

DOUBLE

Y

不涉及

Y

N

Y

Y

Y

STRING

Y

Y

不涉及

Y

Y

Y

Y

DATETIME

N

N

Y

不涉及

N

N

N

BOOLEAN

Y

Y

Y

N

不涉及

Y

Y

DECIMAL

Y

Y

Y

N

Y

不涉及

Y

FLOAT

Y

Y

Y

N

Y

Y

不涉及

其中,Y表示可以轉(zhuǎn)換,N表示不可以轉(zhuǎn)換,不涉及表示不需要轉(zhuǎn)換。不支持的顯式類(lèi)型轉(zhuǎn)換會(huì)失敗并報(bào)錯(cuò)退出。

  • 示例數(shù)據(jù):

    說(shuō)明

    本文中使用示例涉及user表的示例,都可使用此示例數(shù)據(jù)。

    create table if not exists user (
      user_name string,
    	user_id bigint,
    	age bigint   
    );
    insert into user values ('zhangsan',111,20);
  • 使用示例:

    SELECT CAST(user_id AS DOUBLE) AS new_id from user;
    SELECT CAST('2015-10-01 00:00:00' AS DATETIME) AS new_date;
    SELECT CAST(ARRAY(1,2,3) AS ARRAY<STRING>);
    SELECT CONCAT_WS(',', CAST(ARRAY(1, 2) AS ARRAY<STRING>));

使用說(shuō)明和限制

  • 將DOUBLE類(lèi)型轉(zhuǎn)為BIGINT類(lèi)型時(shí),小數(shù)部分會(huì)被截?cái)啵?span data-tag="ph" id="codeph-kyp-1bp-n5g" class="ph">CAST(1.6 AS BIGINT) = 1

  • 滿(mǎn)足DOUBLE格式的STRING類(lèi)型轉(zhuǎn)換為BIGINT時(shí),會(huì)先將STRING轉(zhuǎn)換為DOUBLE,再將DOUBLE轉(zhuǎn)換為BIGINT,因此,小數(shù)部分會(huì)被截?cái)啵?span data-tag="ph" id="codeph-6w4-kqu-jj7" class="ph">CAST(“1.6” AS BIGINT) = 1

  • 滿(mǎn)足BIGINT格式的STRING類(lèi)型可以被轉(zhuǎn)換為DOUBLE類(lèi)型,小數(shù)點(diǎn)后保留一位,例如CAST(“1” AS DOUBLE) = 1.0

  • 日期類(lèi)型轉(zhuǎn)換時(shí)采用默認(rèn)格式yyyy-mm-dd hh:mi:ss

  • 部分類(lèi)型之間不可以通過(guò)顯式的類(lèi)型轉(zhuǎn)換,但可以通過(guò)SQL內(nèi)建函數(shù)進(jìn)行轉(zhuǎn)換,例如從BOOLEAN類(lèi)型轉(zhuǎn)換到STRING類(lèi)型,可使用函數(shù)TO_CHAR,詳情請(qǐng)參見(jiàn)TO_CHAR。而TO_DATE函數(shù)同樣支持從STRING類(lèi)型到DATETIME類(lèi)型的轉(zhuǎn)換,詳情請(qǐng)參見(jiàn)TO_DATE

  • DECIMAL超出值域,CAST STRING TO DECIMAL可能會(huì)出現(xiàn)最高位溢出報(bào)錯(cuò)、最低位溢出截?cái)嗟惹闆r。

  • DECIMAL類(lèi)型顯示轉(zhuǎn)換為DOUBLE、FLOAT等類(lèi)型會(huì)產(chǎn)生精度損失,對(duì)于精度有要求的場(chǎng)景,例如計(jì)算金額、費(fèi)率等,建議使用DECIMAL類(lèi)型。

  • MaxCompute支持復(fù)雜類(lèi)型的類(lèi)型轉(zhuǎn)換功能。其中復(fù)雜類(lèi)型的隱式類(lèi)型轉(zhuǎn)換要求子類(lèi)型能夠隱式轉(zhuǎn)換,而顯示轉(zhuǎn)換要求子類(lèi)型能夠顯示轉(zhuǎn)換。STRUCT類(lèi)型轉(zhuǎn)換不要求字段名稱(chēng)一致,但是要求字段的數(shù)量一致,且對(duì)應(yīng)的字段能夠隱式或顯示轉(zhuǎn)換。例如:

    • ARRAY<BIGINT>能隱式轉(zhuǎn)換或顯示轉(zhuǎn)換為ARRAY<STRING>

    • ARRAY<BIGINT>能顯示轉(zhuǎn)換為ARRAY<INT>,但是不能隱式轉(zhuǎn)換。

    • ARRAY<BIGINT>不能隱式轉(zhuǎn)換或顯示轉(zhuǎn)換為ARRAY<DATETIME>

    • STRUCT<a:BIGINT,b:INT>能隱式轉(zhuǎn)換為STRUCT<col1:STRING,col2:BIGINT>,但是不能隱式或顯示轉(zhuǎn)換為STRUCT<a:STRING>

隱式類(lèi)型轉(zhuǎn)換及其作用域

隱式類(lèi)型轉(zhuǎn)換是指在運(yùn)行時(shí),由MaxCompute依據(jù)上下文使用環(huán)境及類(lèi)型轉(zhuǎn)換規(guī)則自動(dòng)進(jìn)行的類(lèi)型轉(zhuǎn)換。MaxCompute支持的隱式類(lèi)型轉(zhuǎn)換規(guī)則,如下表所示。

From/To

BOOLEAN

TINYINT

SMALLINT

INT

BIGINT

FLOAT

BOOLEAN

不涉及

N

N

N

N

N

TINYINT

N

不涉及

Y

Y

Y

Y

SMALLINT

N

N

不涉及

Y

Y

Y

INT

N

N

Y

不涉及

Y

Y

BIGINT

N

N

N

N

不涉及

Y

FLOAT

N

N

N

N

Y

不涉及

From/To

DOUBLE

DECIMAL

STRING

VARCHAR

TIMESTAMP

BINARY

DOUBLE

不涉及

Y

Y

Y

N

N

DECIMAL

N

不涉及

Y

Y

N

N

STRING

Y

Y

不涉及

Y

N

N

VARCHAR

Y

Y

Y

不涉及

N

N

TIMESTAMP

N

N

Y

Y

不涉及

N

BINARY

N

N

N

N

N

不涉及

其中,Y表示可以轉(zhuǎn)換,N表示不可以轉(zhuǎn)換,不涉及表示不需要轉(zhuǎn)換。不支持的隱式類(lèi)型轉(zhuǎn)換會(huì)導(dǎo)致異常。如果在執(zhí)行時(shí)轉(zhuǎn)換失敗,也會(huì)導(dǎo)致異常。

說(shuō)明
  • MaxCompute 2.0新增了DECIMAL類(lèi)型與DATETIME的常量定義方式,100BD是數(shù)值為100的DECIMAL,2017-11-11 00:00:00是DATETIME類(lèi)型的常量。VALUES子句和VALUES表中可以直接使用常量定義。

  • 由于隱式類(lèi)型轉(zhuǎn)換是MaxCompute依據(jù)上下文使用環(huán)境自動(dòng)進(jìn)行的類(lèi)型轉(zhuǎn)換,因此推薦您在類(lèi)型不匹配時(shí),顯式地用CAST進(jìn)行轉(zhuǎn)換。

  • 隱式類(lèi)型轉(zhuǎn)換規(guī)則是有發(fā)生作用域的。在某些作用域中,只有一部分規(guī)則可以生效。

示例

SELECT user_id+age+'12345', CONCAT(user_name,user_id,age) FROM user;

不同運(yùn)算符作用下的隱式轉(zhuǎn)換如下:

  • 關(guān)系運(yùn)算符作用下的隱式轉(zhuǎn)換

    關(guān)系運(yùn)算符包括=、<>、<、<=、>、>=、IS NULL、IS NOT NULL、LIKE、RLIKE、IN。由于LIKE、RLIKE、IN的隱式類(lèi)型轉(zhuǎn)換規(guī)則不同于其他關(guān)系運(yùn)算符,將單獨(dú)對(duì)其進(jìn)行說(shuō)明。此處的說(shuō)明不包含這三種特殊的關(guān)系運(yùn)算符。

    當(dāng)不同類(lèi)型的數(shù)據(jù)共同參與關(guān)系運(yùn)算時(shí),按照下述原則進(jìn)行隱式類(lèi)型轉(zhuǎn)換。

    From/To

    BIGINT

    DOUBLE

    STRING

    DATETIME

    BOOLEAN

    DECIMAL

    BIGINT

    不涉及

    DOUBLE

    DOUBLE

    N

    N

    DECIMAL

    DOUBLE

    DOUBLE

    不涉及

    DOUBLE

    N

    N

    DECIMAL

    STRING

    DOUBLE

    DOUBLE

    不涉及

    DATETIME

    N

    DECIMAL

    DATETIME

    N

    N

    DATETIME

    不涉及

    N

    N

    BOOLEAN

    N

    N

    N

    N

    不涉及

    N

    DECIMAL

    DECIMAL

    DECIMAL

    DECIMAL

    N

    N

    不涉及

    說(shuō)明
    • 如果進(jìn)行比較的兩個(gè)類(lèi)型間不能進(jìn)行隱式類(lèi)型轉(zhuǎn)換,則該關(guān)系運(yùn)算不能完成,報(bào)錯(cuò)退出。

    • 關(guān)系運(yùn)算符的更多詳情,請(qǐng)參見(jiàn)運(yùn)算符

  • 特殊的關(guān)系運(yùn)算符作用下的隱式轉(zhuǎn)換

    特殊的關(guān)系運(yùn)算符包括LIKE、RLIKE、IN

    • LIKE和RLIKE的使用方式,如下所示。

      source LIKE pattern;  
      source RLIKE pattern;
      說(shuō)明
      • LIKE和RLIKE的source和pattern參數(shù)均僅接受STRING類(lèi)型。

      • 其他類(lèi)型不允許參與運(yùn)算,也不能進(jìn)行到STRING類(lèi)型的隱式類(lèi)型轉(zhuǎn)換。

    • IN的使用方式如下。

      key IN (value1, value2, …)
      說(shuō)明
      • IN右側(cè)的VALUE值列表中的數(shù)據(jù)類(lèi)型必須保持一致。

      • 當(dāng)KEY與VALUES之間比較時(shí),如果數(shù)據(jù)類(lèi)型包含BIGINT、DOUBLE、STRING,建議統(tǒng)一轉(zhuǎn)換為DOUBLE類(lèi)型;如果數(shù)據(jù)類(lèi)型包含DATETIME、STRING,建議統(tǒng)一轉(zhuǎn)換為DATETIME類(lèi)型。除此之外不允許其他類(lèi)型之間的轉(zhuǎn)換。

  • 算術(shù)運(yùn)算符作用下的隱式轉(zhuǎn)換

    算術(shù)運(yùn)算符包括+、-、*、/、%,其隱式轉(zhuǎn)換規(guī)則如下:

    • 只有STRING、BIGINT、DOUBLE和DECIMAL才能參與算術(shù)運(yùn)算。

    • STRING在參與運(yùn)算前會(huì)進(jìn)行隱式類(lèi)型轉(zhuǎn)換到DOUBLE。

    • BIGINT和DOUBLE共同參與計(jì)算時(shí),會(huì)將BIGINT隱式轉(zhuǎn)換為DOUBLE。

    • 日期型和布爾型不允許參與算數(shù)運(yùn)算。

  • 邏輯運(yùn)算符作用下的隱式轉(zhuǎn)換

    邏輯運(yùn)算符包括and、or、not,其隱式轉(zhuǎn)換規(guī)則,如下:

    • 只有BOOLEAN才能參與邏輯運(yùn)算。

    • 其他類(lèi)型不允許參與邏輯運(yùn)算,也不允許其他類(lèi)型的隱式類(lèi)型轉(zhuǎn)換。

內(nèi)建函數(shù)涉及到的隱式轉(zhuǎn)換

MaxCompute SQL提供了大量的系統(tǒng)函數(shù),方便您對(duì)任意行的一列或多列進(jìn)行計(jì)算,輸出任意種類(lèi)的數(shù)據(jù)類(lèi)型。其隱式轉(zhuǎn)換規(guī)則如下:

  • 在調(diào)用函數(shù)時(shí),如果輸入?yún)?shù)的數(shù)據(jù)類(lèi)型與函數(shù)定義的參數(shù)數(shù)據(jù)類(lèi)型不一致,把輸入?yún)?shù)的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為函數(shù)定義的數(shù)據(jù)類(lèi)型。

  • 每個(gè)MaxCompute SQL內(nèi)建函數(shù)的參數(shù)對(duì)于允許的隱式類(lèi)型轉(zhuǎn)換的要求不同,詳情請(qǐng)參見(jiàn)內(nèi)建函數(shù)概述

CASE WHEN作用下的隱式轉(zhuǎn)換

CASE WHEN的詳情介紹請(qǐng)參見(jiàn)CASE WHEN表達(dá)式。它的隱式轉(zhuǎn)換規(guī)則,如下:

  • 如果返回類(lèi)型只有BIGINT、DOUBLE,統(tǒng)一轉(zhuǎn)換為DOUBLE。

  • 如果返回類(lèi)型中有STRING類(lèi)型,統(tǒng)一轉(zhuǎn)換為STRING,如果不能轉(zhuǎn)換(如BOOLEAN類(lèi)型)則報(bào)錯(cuò)。

  • 除此之外不允許其他類(lèi)型之間的轉(zhuǎn)換。

STRING與DATETIME類(lèi)型之間的轉(zhuǎn)換

MaxCompute支持STRING類(lèi)型和DATETIME類(lèi)型之間的相互轉(zhuǎn)換。轉(zhuǎn)換時(shí)使用的格式為yyyy-mm-dd hh:mi:ss

單位

字符串(忽略大小寫(xiě))

有效值域

yyyy

0001~9999

mm

01~12

dd

01~28|29|30|31

時(shí)

hh

00~23

mi

00~59

ss

00~59

說(shuō)明
  • 各個(gè)單位的值域中,如果首位為0,不可省略。例如2014-1-9 12:12:12為非法的DATETIME格式,無(wú)法從STRING類(lèi)型數(shù)據(jù)轉(zhuǎn)換為DATETIME類(lèi)型,必須寫(xiě)為2014-01-09 12:12:12

  • 只有符合上述格式描述的STRING類(lèi)型才能夠轉(zhuǎn)換為DATETIME類(lèi)型,例如CAST(“2013-12-31 02:34:34” AS DATETIME),將會(huì)把STRING類(lèi)型2013-12-31 02:34:34 轉(zhuǎn)換為DATETIME類(lèi)型。同理,DATETIME轉(zhuǎn)換為STRING時(shí),默認(rèn)轉(zhuǎn)換為yyyy-mm-dd hh:mi:ss格式。

MaxCompute提供了TO_DATE函數(shù),用于將不滿(mǎn)足日期格式的STRING類(lèi)型數(shù)據(jù)轉(zhuǎn)換為DATETIME類(lèi)型。詳情請(qǐng)參見(jiàn)TO_DATE