SnowConvert AI - SQL Server-Azure Synapse - 組み込み関数

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

組み込み関数とそれに相当するSnowflake関数の詳細については、 共通組み込み関数 もご参照ください。

集計

TransactSQL

Snowflake

メモ

TransactSQL

Snowflake

メモ

APPROX_COUNT_DISTINCT

APPROX_COUNT_DISTINCT

AVG​

AVG

CHECKSUM_AGG

*定義される

COUNT

COUNT

COUNT_BIG

*定義される

GROUPING

GROUPING

GROUPING_ID

GROUPING_ID

MAX

MAX

MIN

MIN

STDEV

STDDEV, STDEV_SAMP

STDEVP

STDDEV_POP

SUM

SUM

VAR

VAR_SAMP

VARP

VAR_POP​

分析

TransactSQL

Snowflake

メモ

CUME_DIST

CUME_DIST

FIRST_VALUE

FIRST_VALUE

LAG

LAG

LAST_VALUE

LAST_VALUE

LEAD

LEAD

PERCENTILE_CONT

PERCENTILE_CONT

PERCENTILE_DISC

PERCENTILE_DISC

PERCENT_RANK

PERCENT_RANK

照合

TransactSQL

Snowflake

メモ

COLLATIONPROPERTY

*定義される

TERTIARY_WEIGHTS

*定義される

設定

TransactSQL

Snowflake

メモ

​@@DBTS

*定義される

@@LANGID

*定義される

@@LANGUAGE

*定義される

@@LOCK_TIMEOUT

*定義される

@@MAX_CONNECTIONS

*定義される

@@MAX_PRECISION

*定義される

@@NESTLEVEL

*定義される

@@OPTIONS

*定義される

@@REMSERVER

*定義される

@@SERVERNAME

CONCAT('app.snowflake.com', CURRENT_ACCOUNT( ))

@@SERVICENAME

*定義される

@@SPID

*定義される

@@TEXTSIZE

*定義される

@@VERSION

*定義される

CURRENT_VERSION を使用して模倣することができます

変換

TransactSQL

Snowflake

メモ

CAST

CAST

<p>値が数値でない場合は NULL を返し、そうでない場合は数値をそのまま返します。<br>&#x3C;、>、=、&#x3C;>などの演算子を使用する場合は、 NULL が続く必要があります</p>

CONVERT

CONVERTをチェックしてください

CAST と同じ動作

PARSE

*定義される

TRY_CAST

TRY_CAST

<p>値が数値でない場合は NULL を返し、そうでない場合は数値をそのまま返します。<br>&#x3C;、>、=、&#x3C;>などの演算子を使用する場合は、 NULL が続く必要があります</p>

TRY_CONVERT

*定義される

TRY_CAST と同じ動作

TRY_PARSE

TRY_CAST

整数を日付やタイムスタンプとして解析する場合の動作は異なるかもしれません。

暗号化

TransactSQL

Snowflake

メモ

ASYMKEY_ID

*定義される

ASYMKEYPROPERTY

*定義される

CERTENCODED

*定義される

CERTPRIVATEKEY

*定義される

DECRYPTBYASYMKEY

*定義される

DECRYPTBYCERT

*定義される

DECRYPTBYKEY

*定義される

DECRYPTBYKEYAUTOASYMKEY

*定義される

DECRYPTBYKEYAUTOCERT

*定義される

DECRYPTBYPASSPHRASE

_*to be defined_​

DENCRYPT_RAW を使用して模倣することができます

ENCRYPTBYASYMKEY

*定義される

ENCRYPTBYCERT

*定義される

ENCRYPTBYKEY

*定義される

ENCRYPTBYPASSPHRASE

*定義される

ENCRYPT_RAW を使用して模倣することができます

HASHBYTES

MD5, SHA1, SHA2

<p> 現在、唯一サポートされている個別のハッシュ。必要なアルゴリズムに従って適切なものを使用します </p><p><strong>MD5</strong> は32文字の16進数エンコード </p><p><strong>SHA1</strong> は160ビットを含む40文字の16進数エンコード文字列 </p><p><strong>SHA2</strong> はNビット SHA-2メッセージダイジェストを含む16進数エンコード文字列 。サイズ: </p><p>224 = SHA-224</p><p>256 = SHA-256(デフォルト) </p><p>384 = SHA-384</p><p>512 = SHA-512</p>

IS_OBJECTSIGNED

*定義される

KEY_GUID

*定義される

KEY_ID

*定義される

KEY_NAME

*定義される

SIGNBYASYMKEY

*定義される

SIGNBYCERT

*定義される

SYMKEYPROPERTY

*定義される

VERIGYSIGNEDBYCERT

*定義される

カーソル

TransactSQL

Snowflake

メモ

@@CURSOR_ROWS

*定義される

@@FETCH_STATUS

*定義される

CURSOR_STATUS

*定義される

データ型

TransactSQL

Snowflake

メモ

DATALENGTH

OCTET_LENGTH

​Snowflakeは小数バイトを使わないので、長さは常に8 * OCTET_LENGTH として計算されます

IDENT_SEED

*定義される

IDENT_CURRENT

*定義される

IDENTITY

*定義される

IDENT_INCR

*定義される

SQL_VARIANT_PROPERTY

*定義される

日付と時刻

TransactSQL

Snowflake

メモ

@@DATEFIRST

*定義される

@@LANGUAGE

*定義される

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP

CURRENT_TIMEZONE

*定義される

DATEADD

DATEADD

DATEDIFF

DATEDIFF

DATEDIFF_BIG

*定義される

DATEFROMPARTS

DATE_FROM_PARTS

DATENAME

*定義される

<p>この関数は2つの引数(DatepartとDate)を受け取ります。これは文字列を返します。以下は、 TSQL からSnowflakeへの移行でサポートされているDatepartsです </p><p><strong>year, yyyy, yy</strong> -> DATE_PART(YEAR, "$date") <strong>quarter, qq, q</strong> -> DATE_PART(QUARTER, "$date")<br><strong>month, mm, m</strong> -> <strong>MONTHNAME</strong>( "$date") 、英語の月の名前を3文字で提供 <br><strong>dayofyear, dy, y</strong> -> DATE_PART(DAYOFYEAR, "$date")<br><strong>day, dd, d</strong> -> DATE_PART(DAY, "$date")<br><strong>week, wk, ww</strong> -> DATE_PART(WEEK, "$date")</p><p><strong>weekday, dw</strong> -> <strong>DAYNAME</strong>("$date") 、英語の曜日の名前を3文字で提供 <br><strong>hour, hh</strong> -> DATE_PART(HOUR, "$date")<br><strong>minute, n</strong> -> DATE_PART(MINUTE, "$date")<br><strong>second, ss, s</strong> -> DATE_PART(SECOND, "$date")<br><strong>millisecond, ms</strong> -> DATE_PART(MS, "$date") <strong>microsecond, mcs</strong> -> DATE_PART(US, "$date")<br><strong>nanosecond, ns</strong> -> DATE_PART(NS, "$date")<br><strong>TZoffset, tz</strong> -> は時間のオフセットを取得するために特別な実装を必要とします </p>

DATEPART

DATE_PART

DATETIME2FROMPARTS

*定義される

DATETIMEFROMPARTS

*定義される

DATE_FROM_PARTS と TIME_FROM_PARTS の組み合わせを使用して模倣することができます

DATETIMEOFFSETFROMPARTS

*定義される

DAY

DAY

EOMONTH

*定義される

LAST_DAY を使用して模倣することができます

GETDATE

GETDATE

GETUTCDATE

*定義される

CONVERT_TIMEZONE を使用して模倣することができます

ISDATE

*定義される

<p> <strong>TRY_TO_DATE</strong> を使用して模倣できます </p><p> 値が <strong>日付</strong> でない場合、 NULL を返します。それ以外は日付の値を返します。 <br> &#x3C;, >, =, &#x3C;>などの演算子を使う場合は、その後に NULL が続く必要があります </p>

MONTH

MONTH

SMALLDATETIMEFROMPARTS

*定義される

​​ DATE_FROM_PARTS と TIME_FROM_PARTS の組み合わせを使用して模倣することができます

SWITCHOFFSET

*定義される

CONVERT_TIMEZONE を使用して模倣することができます

SYSDATETIME

LOCALTIME

SYSDATETIMEOFFSET

*定義される

CONVERT_TIMEZONE および LOCALTIME を使用して模倣することができます

SYSUTCDATETIME

*定義される

​​ CONVERT_TIMEZONE および LOCALTIME を使用して模倣することができます

TIMEFROMPARTS

TIME_FROM_PARTS

TODATETIMEOFFSET

*定義される

CONVERT_TIMEZONE を使用して模倣することができます

YEAR

YEAR

JSON

TransactSQL

Snowflake

メモ

ISJSON

CHECK_JSON

​これはSnowflakeの「プレビュー機能」です

JSON_VALUE

*定義される

<p>TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))</p><p>を使用して模倣することができます</p>

JSON_QUERY

*定義される

JSON_MODIFY

*定義される

数学

TransactSQL

Snowflake

メモ

ABS

ABS

ACOS

ACOS

ASIN

ASIN

ATAN

ATAN

ATN2

ATAN2

CEILING

CEIL

COS

COS

COT

COT

DEGREES

DEGREES

EXP

EXP

FLOOR

FLOOR

LOG

LN

LOG10

LOG

PI

PI

POWER

POWER

RADIANS

RADIANS

RAND

RANDOM

ROUND

ROUND

SIGN

SIGN

SIN

SIN

SQRT

SQRT

SQUARE

SQUARE

論理的

TransactSQL

Snowflake

メモ

CHOOSE

*定義される

DECODE を使用して模倣することができます

GREATEST

GREATEST

IIF

IIF

LEAST

LEAST

NULLIF

NULLIF

メタデータ

TransactSQL

Snowflake

メモ

TransactSQL

Snowflake

メモ

@@PROCID

*定義される

APP_NAME

*定義される

APPLOCK_MODE

*定義される

APPLOCK_TEST

*定義される

ASSEMBLYPROPERTY

*定義される

COL_LENGTH

この情報を取得するために、 COL_LENGTH_UDF という UDF が提供されます。この UDF は、Transact-SQL ドキュメントで指定されているように、 VARCHAR 型でのみ機能します。その他のデータ型の場合は、 NULL を返します。

COL_NAME

*定義される

COLUMNPROPERTY

*定義される

DATABASE_PRINCIPAL_ID

*定義される

引数がない場合は CURRENT_USER にマップします

DATABASEPROPERTYEX

*定義される

DB_ID

*定義される

CURRENT_DATABASE() に変更することをお勧めします。この機能をエミュレートする必要がある場合。
SELECT DATE_PART(EPOCH,CREATED) FROM INFORMATION_SCHEMA.DATABASES WHERE DATABASE_NAME = 'DB' ;
は似たようなことを達成できます

DB_NAME

*定義される

主に上記のプロシージャ名で使用されます

FILE_ID

*定義される

FILE_IDEX

*定義される

FILE_NAME

*定義される

FILEGROUP_ID

*定義される

FILEGROUP_NAME

*定義される

FILEGROUPPROPERTY

*定義される

FILEPROPERTY

*定義される

FULLTEXTCATALOGPROPERTY

*定義される

FULLTEXTSERVICEPROPERTY

*定義される

INDEX_COL

*定義される

INDEXKEY_PROPERTY

*定義される

INDEXPROPERTY

*定義される

NEXT VALUE FOR

*定義される

OBJECT_DEFINITION

*定義される

OBJECT_ID

*定義される

ほとんどの場合、置き換えることができます。ほとんどの場合、次のようになります。 IF OBJECT_ID('dbo.TABLE') IS NOT NULL DROP TABLE dbo.Table は DROP TABLE IF EXISTS で置き換えられます(この構文も SQL SERVER でサポートされています)。object_idを複製する必要がある場合、関数呼び出しの2番目のパラメーターに応じて UDF が追加されます。

OBJECT_NAME

*定義される

次で置き換えることができます。 CREATE OR REPLACE PROCEDURE FOO() RETURNS STRING LANGUAGE JAVASCRIPT AS ' var rs = snowflake.execute({sqlText:SELECT CURRENT_DATABASE() | '.' | ?, binds:[arguments.callee.name]}); rs.next(); var procname = rs.getColumnValue(1); return procname; ';

OBJECT_NAME(@@PROCID)

'ObjectName'

この変換は、 DeclareStatement 内にある場合にのみ行われます。

ObjectName は、関数を含む TopLevelObject の名前です。

OBJECT_SCHEMA_NAME

*定義される

OBJECT_SCHEMA_NAME(@@PROCID)

:OBJECT_SCHEMA_NAME

この変換は、 DeclareStatement 内にあるときにのみ行われます。

OBJECTPROPERTY

*定義される

OBJECTPROPERTYEX

*定義される

ORIGINAL_DB_NAME

*定義される

PARSENAME

PARSENAME_UDF

Parsename関数と同じ動作をエミュレートする UDF を作成します。

*定義される

SCHEMA_NAME

*定義される

SCOPE_IDENTITY

*定義される

これが必要な場合は、シーケンスを使用し、挿入前に値をキャプチャすることをお勧めします

SERVERPROPERTY

*定義される

STATS_DATE

*定義される

TYPE_ID

*定義される

TYPE_NAME

*定義される

TYPEPROPERTY

*定義される

VERSION

*定義される

ランキング

TransactSQL

Snowflake

メモ

DENSE_RANK

DENSE_RANK

NTILE

NTILE

RANK

RANK

ROW_NUMBER

ROW_NUMBER

複製

TransactSQL

Snowflake

メモ

PUBLISHINGSERVERNAME

*定義される

行セット

TransactSQL

Snowflake

メモ

OPENDATASOURCE

*定義される

OPENJSON

*定義される

QPENQUERY

*定義される

OPENROWSET

*定義される

OPENXML

OPENXML_UDF

Snowflakeで同等の動作として使用されるユーザー定義関数。

STRING_SPLIT

SPLIT_TO_TABLE

Transact-SQL の STRING_SPLIT 内のenable_ordinalは、Snowflakeの SPLIT_TO_TABLE 関数によって直接サポートされていません。序数列が必要な場合は、 STRING_SPLIT_UDF というユーザー定義関数( UDF )が生成され、この動作を複製します。序数列がない場合、 STRING_SPLIT はvalueという単一の列を返し、 SPLIT_TO_TABLE は3つの列(value、index(ordinalに相当)、seq)を返すことに注意してください。詳しくは SPLIT_TO_TABLE ドキュメント をご参照ください。

セキュリティ

TransactSQL

Snowflake

メモ

CERTENCODED

*定義される

CERTPRIVATEKEY

*定義される

CURRENT_USER

CURRENT_USER

DATABASE_PRINCIPAL_ID

*定義される

HAS_PERMS_BY_NAME

*定義される

IS_MEMBER

*定義される

クライアントが新しいロールを定義する必要があるかもしれないが、クエリ INFORMATION_SCHEMA に変更する

IS_ROLEMEMBER

*定義される

<p>Snowflakeの類似の関数</p><p><strong>IS_ROLE_IN_SESSION</strong></p>

IS_SRVROLEMEMBER

*定義される

LOGINPROPERTY

*定義される

ORIGINAL_LOGIN

*定義される

PERMISSIONS

*定義される

PWDCOMPARE

*定義される

PWDENCRYPT

*定義される

SCHEMA_ID

*定義される

SCHEMA_NAME

*定義される

SESSION_USER

*定義される

SUSER_ID

*定義される

SUSER_NAME

*定義される

SUSER_SID

*定義される

SUSER_SNAME

*定義される

sys.fn_builtin_permissions

*定義される

sys.fn_get_audit_file

*定義される

sys.fn_my_permissions

*定義される

SYSTEM_USER

*定義される

USER_ID

*定義される

USER_NAME

*定義される

CURRENT_USER にマッピングします

String

TransactSQL

Snowflake

メモ

ASCII

ASCII

CHAR

CHR, CHAR

CHARINDEX

CHARINDEX

CONCAT

CONCAT

CONCAT_WS

CONCAT_WS

COALESCE

COALESCE

DIFFERENCE

*定義される

FORMAT

TO_CHAR

SSC-EWI-0006または SSC-FDM-0036は、形式(数値または日付時刻)が完全にサポートされていない場合に生成される可能性があります。

LEFT

LEFT

LEN

LEN

LOWER

LOWER

LTRIM

LTRIM

NCHAR

*定義される

PATINDEX

*定義される

REGEXP_INSTR にマッピングします

QUOTENAME

QUOTENAME_UDF

Quotename関数と同じ動作をエミュレートするために UDF を作成します

REPLACE

REPLACE

REPLICATE

REPEAT

REVERSE

REVERSE

RIGHT

RIGHT

RTRIM

RTRIM

SOUNDEX

SOUNDEX

SPACE

*定義される

STR

*定義される

STRING_AGG

*定義される

STRING_ESCAPE

*定義される

STRING_SPLIT

SPLIT_TO_TABLE

STUFF

*定義される

CREATE OR REPLACE FUNCTION STUFF(S string, STARTPOS int, LENGTH int, NEWSTRING string) RETURNS string LANGUAGE SQL AS ' left(S, STARTPOS)

SUBSTRING

SUBSTRING

TRANSLATE

TRANSLATE

TRIM

TRIM

UNICODE

UNICODE

UPPER

UPPER

システム

TransactSQL

Snowflake

メモ

$PARTITION

*定義される

@@ERROR

*定義される

@@IDENTITY

*定義される

これが必要な場合は、シーケンスを使用し、挿入前に値をキャプチャすることをお勧めします

@@PACK_RECEIVED

*定義される

@@ROWCOUNT

*定義される

@@TRANCOUNT

*定義される

BINARY_CHECKSUM

*定義される

CHECKSUM

*定義される

COMPRESS

COMPRESS

<p>​Snowflakeのバージョンには、圧縮方法を示すメソッド引数があります。有効な値は <strong>SNAPPY ZLIB 、 ZSTD 、 BZ2</strong> です</p><p>圧縮レベルは括弧内で指定し、負でない整数でなければなりません</p>

CONNECTIONPROPERTY

*定義される

CONTEXT_INFO

*定義される

CURRENT_REQUEST_ID

*定義される

CURRENT_TRANSACTION_ID

*定義される

DECOMPRESS

*定義される

Snowflakeには、これらのための関数が2つあります: DECOMPRESS_BINARY および DECOMPRESS_STRING

ERROR_LINE

*定義される

<p>SnowScript :**[SSC-EWI-0040](/migrations/snowconvert-docs/general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md)** のあるSnowflakeではサポートされていません。</p> <p>JavaScript :**ERROR\_LINE** ヘルパーにマップされます。 EXEC ヘルパーはスタックトレースからException行プロパティをキャプチャします。 </p>

ERROR_MESSAGE

SQLERRM

追加される SSC-FDM-TS0023 のエラーメッセージはSnowflakeでは異なる可能性があります。

ERROR_NUMBER

*定義される

<p>SnowScript :**[SSC-EWI-0040](/migrations/snowconvert-docs/general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md)** のあるSnowflakeではサポートされていません。</p> <p>JavaScript :**ERROR\_NUMBER** ヘルパーにマップされます。 EXEC ヘルパーはExceptionコードプロパティをキャプチャします。</p>

ERROR_PROCEDURE

Mapped

<p>SnowScript :現在のプロシージャ名を使用します。追加された **SSC-FDM-TS0023** 結果値は、例外が発生する場所ではなく、関数が呼び出されるストアドプロシージャに基づきます。</p> <p>JavaScript :**ERROR\_PROCEDURE** ヘルパーにマップされます。 `arguments.callee.name` プロシージャプロパティから取得されます。</p>

ERROR_SEVERITY

*定義される

<p>SnowScript :**[SSC-EWI-0040](/migrations/snowconvert-docs/general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI.md)** のあるSnowflakeではサポートされていません。</p>

ERROR_STATE

SQLSTATE

<p>SnowScript :**SQLSTATE** Snowflakeプロパティに変換されます。追加される **SSC-FDM-TS0023** 戻り値はSnowflakeでは異なる可能性があります。</p> <p>JavaScript :ヘルパーはException状態プロパティをキャプチャします。</p>

FORMATMESSAGE

FORMATEMESSAGE_UDF

FORMATMESSAGE 関数と同じ動作をエミュレートする UDF を作成しますが、いくつかの制限があります。

GET_FILESTREAM_TRANSACTION_CONTEXT

*定義される

GETANSINULL

*定義される

HOST_ID

*定義される

HOST_NAME

*定義される

ISNULL

NVL

ISNUMERIC

*定義される

直接等価なものはありませんが、カスタム UDF にマッピングすることができ、 TSQL と同じ値を返します。

MIN_ACTIVE_ROWVERSION

*定義される

NEWID

*定義される

​UUID_STRING にマッピングします

NEWSEQUENTIALID

*定義される

ROWCOUNT_BIG

*定義される

SESSION_CONTEXT

*定義される

SESSION_ID

*定義される

XACT_STATE

*定義される

システム統計

TransactSql

Snowflake

メモ

@@CONNECTIONS

*定義される

<p>​Snowflakeの類似の関数: <strong>LOGIN_HISTORY.</strong></p><p>は指定された時間範囲内のログインイベントを返します</p>

@@PACK_RECEIVED

*定義される

@@CPU_BUSY

*定義される

@@PACK_SENT

*定義される

@@TIMETICKS

*定義される

@@IDLE

*定義される

@@TOTAL_ERRORS

*定義される

@@IO_BUSY

*定義される

@@TOTAL_READ

*定義される

@@PACKET_ERRORS

*定義される

@@TOTAL_WRITE

*定義される

テキスト&イメージ

TransactSQL

Snowflake

メモ

TEXTPTR

*定義される

TEXTVALID

*定義される

トリガー

TransactSQL

Snowflake

メモ

COLUMNS_UPDATED

*定義される

EVENTDATA

*定義される

TRIGGER_NESTLEVEL

*定義される

UPDATE

*定義される

システム関数

このセクションでは、Transact-SQL のシステム関数とSnowflake SQL および JavaScript コードの同等の機能について、Snowflakeでの UDFs の作成に焦点を当てて説明します。

ISNULL

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

NULL を指定された置換値で置き換えます。(Transact-SQL の ISNULL)。

サンプルソースパターン

構文

SQL Server
ISNULL ( check_expression , replacement_value )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

NVL( <expr1> , <expr2> )
Copy

SQL Server

SELECT ISNULL(NULL, 'SNOWFLAKE') AS COMPANYNAME;
Copy

結果:

COMPANYNAME

SNOWFLAKE

Snowflake SQL
SELECT
NVL(NULL, 'SNOWFLAKE') AS COMPANYNAME;
Copy

結果:

COMPANYNAME

SNOWFLAKE

NEWID

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

uniqueidentifier型の一意な値を作成します。(Transact-SQL の NEWID)。

サンプルソースパターン

構文

SQL Server
NEWID ( )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

UUID_STRING()
Copy

警告

ランタイムに一意な ID を生成するため、出力が異なる場合があります

SQL Server

SELECT NEWID ( ) AS ID;
Copy

結果:

ID

47549DDF-837D-41D2-A59C-A6BC63DF7910

Snowflake SQL
SELECT
UUID_STRING( ) AS ID;
Copy

結果:

ID

6fd4312a-7925-4ad9-85d8-e039efd82089

NULLIF

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された2つの式が等しい場合、null値を返します。

サンプルソースパターン

構文

SQL Server
NULLIF ( check_expression , replacement_value )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

NULLIF( <expr1> , <expr2> )
Copy

SQL Server

SELECT NULLIF(6,9) AS RESULT1, NULLIF(5,5) AS RESULT2;
Copy

結果:

RESULT1

RESULT2

6

null

Snowflake SQL
SELECT
NULLIF(6,9) AS RESULT1,
NULLIF(5,5) AS RESULT2;
Copy

結果:

RESULT1

RESULT2

6

null

@@ROWCOUNT

Applies to
  • SQL Server

説明

最後のステートメントによって影響を受けた行の数を返します。(Transact-SQL の@@ROWCOUNT)。

サンプルソースパターン

構文

SQL Server
@@ROWCOUNT
Copy
Snowflake SQL

Snowflake SQL ドキュメント

SQLROWCOUNT
Copy

SQL Server

CREATE TABLE table1
(
    column1 INT
);

CREATE PROCEDURE procedure1
AS
BEGIN
    declare @addCount int = 0;

    INSERT INTO table1 (column1) VALUES (1),(2),(3);
    set @addCount = @addCount + @@ROWCOUNT

   select @addCount
END
;
GO

EXEC procedure1;
Copy

結果:

3

Snowflake SQL
CREATE OR REPLACE TABLE table1
(
    column1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "11/13/2024",  "domain": "test" }}'
;

CREATE OR REPLACE PROCEDURE procedure1 ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "11/13/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        ADDCOUNT INT := 0;
        ProcedureResultSet RESULTSET;
    BEGIN
         

        INSERT INTO table1 (column1) VALUES (1),(2),(3);
        ADDCOUNT := :ADDCOUNT + SQLROWCOUNT;
        ProcedureResultSet := (

       select
            :ADDCOUNT);
        RETURN TABLE(ProcedureResultSet);
    END;
$$;

CALL procedure1();
Copy

結果:

:ADDCOUNT

3

FORMATMESSAGE

Applies to
  • SQL Server

説明

sys.messages内の既存のメッセージ、または指定された文字列からメッセージを構築します。Transact-SQL の FORMATMESSAGE)。

サンプルソースパターン

Snowflakeは FORMATMESSAGE 関数をサポートしていないため、その動作をシミュレートするために、 FORMATMESSAGE_UDFを追加しています。

構文

SQL Server

FORMATMESSAGE ( { msg_number  | ' msg_string ' | @msg_variable} , [ param_value [ ,...n ] ] )  
Copy

SQL Server

SELECT FORMATMESSAGE('This is the %s and this is the %s.', 'first variable', 'second variable') AS RESULT;
Copy

結果:

RESULT

これが1つ目の変数で、これが2つ目の変数です。

Snowflake

SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('This is the %s and this is the %s.', ARRAY_CONSTRUCT('first variable', 'second variable')) AS RESULT;
Copy

結果:

RESULT

これが1つ目の変数で、これが2つ目の変数です。

FORMATMESSAGE_UDF

Snowflakeには、 FORMATMESSAGE の機能を持つ関数はありません。 SnowConvert AI は、 FORMATMESSAGE の動作をエミュレートするために、以下のPython UDF を生成します。

CREATE OR REPLACE FUNCTION FORMATMESSAGE_UDF(MESSAGE STRING, ARGS ARRAY)
RETURNS STRING
LANGUAGE python
IMMUTABLE
RUNTIME_VERSION = '3.8'
HANDLER = 'format_py'
as
$$
def format_py(message,args):
  return message % (*args,)
$$;
Copy

この UDF は、場合によっては正しく動作しない場合があります。

  • %I64d プレースホルダーを使用するとエラーになります。

  • 代入引数の数がプレースホルダーの数と異なる場合、エラーになります。

  • %u%X のような一部の符号なしプレースホルダーは、値を形式化するときに正しく動作しません。

  • message_idsは扱えません。

文字列関数

このセクションでは、Transact-SQL の文字列関数とSnowflake SQL および JavaScript コードの同等の機能について、Snowflakeでの UDFs の作成に焦点を当てて説明します。

CHAR

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

ASCII テーブルのパラメーターとして送られた整数を半角文字で返します(Transact-SQL の CHAR)。

サンプルソースパターン

構文

SQL Server
CHAR( expression )
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

{CHR | CHAR} ( <input> )
Copy
JavaScript

JavaScript 完全ドキュメント

String.fromCharCode( expression1, ... , expressionN )
Copy

SQL Server

SELECT CHAR(170) AS SMALLEST_A
Copy

出力:

SMALLEST_A

ª

Snowflake SQL
SELECT
CHAR(170) AS SMALLEST_A;
Copy

結果:

SMALLEST_A

ª

JavaScript
CREATE OR REPLACE FUNCTION get_char(expression float)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
  return String.fromCharCode( EXPRESSION );
$$;

SELECT GET_CHAR(170) SMALLEST_A;
Copy

結果:

SMALLEST_A

ª

CHARINDEX

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送信された指定された値が、マッチしたときに最初に出現するインデックスを返します(Transact-SQL の CHARINDEX)。

サンプルソースパターン

構文

SQL Server
CHARINDEX( expression_to_find, expression_to_search [, start] )
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

CHARINDEX( <expr1>, <expr2> [ , <start_pos> ] )
Copy
JavaScript

JavaScript 完全ドキュメント

String.indexOf( search_value [, index] )
Copy

SQL Server

SELECT CHARINDEX('t', 'Customer') AS MatchPosition;
Copy

結果:

INDEX

33

Snowflake SQL
SELECT
CHARINDEX('t', 'Customer') AS MatchPosition;
Copy

結果:

INDEX

33

JavaScript

注釈

Transactのインデックスは、 JavaScript が0から始まるのに対して、1から始まります。

CREATE OR REPLACE FUNCTION get_index
(
  expression_to_find varchar, 
  expression_to_search varchar, 
  start_index  float
)
  RETURNS float
  LANGUAGE JAVASCRIPT
AS
$$
  return EXPRESSION_TO_SEARCH.indexOf(EXPRESSION_TO_FIND, START_INDEX)+1;
$$;

SELECT GET_INDEX('and', 'Give your heart and soul to me, and life will always be la vie en rose', 20) AS INDEX;
Copy

結果:

INDEX

33

COALESCE

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

引数を順に評価し、最初に NULL に評価されなかった1つ目の式の現在値を返します。たとえば、 SELECT COALESCE ( NULL 、 NULL 、'third_value'、'fourth_value')は、3番目の値を返します。なぜなら、3番目の値はNULLでない最初の値だからです。( Transact-SQL における COALESCE )。

サンプルソースパターン

構文

SQL Server
COALESCE ( expression [ ,...n ] )   
Copy
Snowflake SQL

Snowflake SQL ドキュメント

COALESCE( <expr1> , <expr2> [ , ... , <exprN> ] )
Copy

SQL Server

SELECT TOP 10 StartDate, 
COALESCE(EndDate,'2000-01-01') AS FIRST_NOT_NULL 
FROM HumanResources.EmployeeDepartmentHistory
Copy

結果:

StartDate

FIRST_NOT_NULL

2009-01-14

2000-01-01

2008-01-31

2000-01-01

2007-11-11

2000-01-01

2007-12-05

2010-05-30

2010-05-31

2000-01-01

2008-01-06

2000-01-01

2008-01-24

2000-01-01

2009-02-08

2000-01-01

2008-12-29

2000-01-01

2009-01-16

2000-01-01

Snowflake SQL
SELECT TOP 10
StartDate,
COALESCE(EndDate,'2000-01-01') AS FIRST_NOT_NULL
FROM
HumanResources.EmployeeDepartmentHistory;
Copy

結果:

StartDate

FIRST_NOT_NULL

2009-01-14

2000-01-01

2008-01-31

2000-01-01

2007-11-11

2000-01-01

2007-12-05

2010-05-30

2010-05-31

2000-01-01

2008-01-06

2000-01-01

2008-01-24

2000-01-01

2009-02-08

2000-01-01

2008-12-29

2000-01-01

2009-01-16

2000-01-01

CONCAT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列値を他の値と連結します。(Transact-SQL の CONCAT)。

サンプルソースパターン

構文

SQL Server
CONCAT ( string_value1, string_value2 [, string_valueN ] )  
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

CONCAT( <expr1> [ , <exprN> ... ] )

<expr1> || <expr2> [ || <exprN> ... ]
Copy
JavaScript

JavaScript 完全ドキュメント

 String.concat( expression1, ..., expressionN )
Copy

SQL Server

SELECT CONCAT('Ray',' ','of',' ','Light') AS TITLE;
Copy

出力:

TITLE

Ray of Light

Snowflake SQL
SELECT
CONCAT('Ray',' ','of',' ','Light') AS TITLE;
Copy

出力:

TITLE

Ray of Light

JavaScript
CREATE OR REPLACE FUNCTION concatenate_strs(strings array)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
  var result = ""
  STRINGS.forEach(element => result = result.concat(element));
  return result;
$$;
SELECT concatenate_strs(array_construct('Ray',' ','of',' ','Light')) TITLE;
Copy

出力:

   TITLE|
Copy

------------| Ray of Light|

LEFT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された文字数の文字列の右部分を返します。(Transact-SQL の RIGHT)。

サンプルソースパターン

構文

SQL Server
LEFT ( character_expression , integer_expression )  
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

LEFT ( <expr> , <length_expr> )
Copy
JavaScript

動作をエミュレートする関数

function LEFT(string, index){
    if(index < 0){
        throw new RangeError('Invalid INDEX on LEFT function');
    }
    return string.slice( 0, index);
  }
return LEFT(STR, INDEX);
Copy

SQL Server

SELECT LEFT('John Smith', 5) AS FIRST_NAME;
Copy

出力:

FIRST_NAME

John

Snowflake SQL
SELECT LEFT('John Smith', 5) AS FIRST_NAME;
Copy

出力:

FIRST_NAME

John

JavaScript
CREATE OR REPLACE FUNCTION left_str(str varchar, index float)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
    function LEFT(string, index){
      if(index < 0){
          throw new RangeError('Invalid INDEX on LEFT function');
      }
      return string.slice( 0, index);
    }
  return LEFT(STR, INDEX);
$$;
SELECT LEFT_STR('John Smith', 5) AS FIRST_NAME;
Copy

出力:

FIRST_NAME

John

LEN

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列の長さを返します(Transact-SQL の LEN)。

サンプルソースパターン

構文

SQL Server
LEN( string_expression )
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

LENGTH( <expression> )
LEN( <expression> )
Copy
JavaScript

JavaScript SQL 完全ドキュメント

 string.length
Copy

SQL Server

SELECT LEN('Sample text') AS [LEN];
Copy

出力:

LEN

11

Snowflake SQL
SELECT LEN('Sample text') AS LEN;
Copy

出力:

LEN

11

JavaScript
CREATE OR REPLACE FUNCTION get_len(str varchar)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  return STR.length;
$$;
SELECT GET_LEN('Sample text') LEN;
Copy

出力:

LEN

11

LOWER

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列を小文字に変換します(Transact-SQL の LOWER)。

サンプルソースパターン

構文

SQL Server
LOWER ( character_expression )  
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

LOWER( <expr> )
Copy
JavaScript

JavaScript SQL 完全ドキュメント

 String.toLowerCase( )
Copy

SQL Server

SELECT LOWER('YOU ARE A PREDICTION OF THE GOOD ONES') AS LOWERCASE;
Copy

出力:

LOWERCASE

you are a prediction of the good ones

Snowflake SQL
SELECT LOWER('YOU ARE A PREDICTION OF THE GOOD ONES') AS LOWERCASE;
Copy

出力:

LOWERCASE

you are a prediction of the good ones

JavaScript
CREATE OR REPLACE FUNCTION to_lower(str varchar)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
  return STR.toLowerCase();
$$;

SELECT TO_LOWER('YOU ARE A PREDICTION OF THE GOOD ONES') LOWERCASE;
Copy

出力:

LOWERCASE

you are a prediction of the good ones

NCHAR

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送られた整数の UNICODE 文字を返します(Transact-SQL の NCHAR)。

サンプルソースパターン

構文

NCHAR( expression )
Copy
引数

: 整数式。

返されるタイプ

文字列値、受け取った入力に依存します。

クエリ

SELECT NCHAR(170);
Copy
結果

ª

注釈

JavaScript におけるこの関数の等価性は CHARにドキュメントがあります。

REPLACE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された文字列値のすべての出現を別の文字列値に置き換えます。(Transact-SQL の REPLACE)。

サンプルソースパターン

構文

SQL Server
REPLACE ( string_expression , string_pattern , string_replacement )  
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

REPLACE( <subject> , <pattern> [ , <replacement> ] )
Copy
JavaScript
 String.replace( pattern, new_expression)
Copy

SQL Server

SELECT REPLACE('Real computer software', 'software','science') AS COLUMNNAME;
Copy

出力:

COLUMNNAME           |
---------------------|
Real computer science|
Copy
Snowflake SQL
SELECT REPLACE('Real computer software', 'software','science') AS COLUMNNAME;
Copy

出力:

COLUMNNAME           |
---------------------|
Real computer science|
Copy
JavaScript
 CREATE OR REPLACE FUNCTION REPLACER (str varchar, pattern varchar, new_expression varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
   return STR.replace( PATTERN, NEW_EXPRESSION );
$$;

SELECT REPLACER('Real computer software', 'software', 'science') AS COLUMNNAME;
Copy

\ 出力:

COLUMNNAME             |
---------------------|
Real computer science|
Copy

REPLICATE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列値を指定回数複製します(Transact-SQL の REPLICATE)。

サンプルソースパターン

構文

SQL Server
REPLICATE( string_expression, number_expression )
Copy
Snowflake SQL

Snowflake SQL ドキュメント

REPEAT(<input>, <n>)
Copy
JavaScript

JavaScript ドキュメント

String.repeat( number_expression )
Copy

SQL Server

SELECT REPLICATE('Staying alive',5) AS RESULT
Copy

結果:

RESULT                                                           |
-----------------------------------------------------------------|
Staying aliveStaying aliveStaying aliveStaying aliveStaying alive|
Copy
Snowflake SQL
SELECT REPEAT('Staying alive',5) AS RESULT;
Copy

結果:

RESULT                                                           |
-----------------------------------------------------------------|
Staying aliveStaying aliveStaying aliveStaying aliveStaying alive|
Copy
JavaScript
 CREATE OR REPLACE FUNCTION REPEAT_STR (str varchar, occurrences float)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
 
   return STR.repeat( OCCURRENCES );
$$;

SELECT REPEAT_STR('Staying alive ', 5) AS RESULT;
Copy

結果:

RESULT                                                           |
-----------------------------------------------------------------|
Staying aliveStaying aliveStaying aliveStaying aliveStaying alive|
Copy

RTRIM

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

先頭の空白を除去した文字式を返します(Transact-SQL の RTRIM)。

サンプルソースパターン

構文

SQL Server
RTRIM( string_expression )
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

RTRIM(<expr> [, <characters> ])
Copy
JavaScript

動作をエミュレートするために使用されるカスタム関数

 function RTRIM(string){
    return string.replace(/s+$/,"");
}
Copy

SQL Server

入力:

SELECT RTRIM('LAST TWO BLANK SPACES  ') AS [RTRIM]
Copy

出力:

RTRIM                |
---------------------|
LAST TWO BLANK SPACES|
Copy
Snowflake SQL
SELECT RTRIM('LAST TWO BLANK SPACES  ') AS RTRIM;
Copy

結果:

RTRIM                |
---------------------|
LAST TWO BLANK SPACES|
Copy
JavaScript
 CREATE OR REPLACE FUNCTION rtrim(str varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  function RTRIM(string){
    return string.replace(/s+$/,"");
    }
   return RTRIM( STR );
$$;

SELECT RTRIM('LAST TWO BLANK SPACES  ') AS RTRIM;
Copy

結果:

RTRIM                |
---------------------|
LAST TWO BLANK SPACES|
Copy

SPACE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

空白の出現回数を返します(Transact-SQL の SPACE)。

サンプルソースパターン

構文

SQL Server
SPACE ( integer_expression )  
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

SPACE(<n>)
Copy
JavaScript

動作をエミュレートするために使用されるカスタム関数

 function SPACE( occurrences ){
    return ' '.repeat( occurrences );
}
Copy

SQL Server

入力:

SELECT CONCAT('SOME', SPACE(5), 'TEXT') AS RESULT;
Copy

出力:

RESULT       |
-------------|
SOME     TEXT|
Copy
Snowflake SQL

入力:

SELECT CONCAT('SOME', SPACE(5), 'TEXT') AS RESULT;
Copy

出力:

RESULT       |
-------------|
SOME     TEXT|
Copy
JavaScript

入力:

 CREATE OR REPLACE FUNCTION SPACE(occurrences float)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
    function SPACE( occurrences ){
    return ' '.repeat( occurrences );
    }
    return SPACE( OCCURRENCES );
$$;

SELECT CONCAT('SOME', SPACE(5), 'TEXT') RESULT;
Copy

出力:

RESULT       |
-------------|
SOME     TEXT|
Copy

SUBSTRING

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

先頭の空白を除去した文字式を返します(Transact-SQL の RTRIM)。

サンプルソースパターン

構文

SQL Server
SUBSTRING( string_expression, start, length )
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

SUBSTR( <base_expr>, <start_expr> [ , <length_expr> ] )

SUBSTRING( <base_expr>, <start_expr> [ , <length_expr> ] )
Copy
JavaScript

動作をエミュレートするために使用されるカスタム関数

 string.substring( indexA [, indexB])
Copy

SQL Server

入力:

SELECT SUBSTRING('abcdef', 2, 3) AS SOMETEXT;  
Copy

出力:

SOMETEXT|
--------|
bcd     |
Copy
Snowflake SQL
SELECT SUBSTRING('abcdef', 2, 3) AS SOMETEXT;  
Copy

結果:

SOMETEXT|
--------|
bcd     |
Copy
JavaScript
 CREATE OR REPLACE FUNCTION REPLACER_LENGTH(str varchar, index float, length float)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
    var start = INDEX - 1;
    var end = STR.length - (LENGTH - 1);
    return STR.substring(start, end);
$$;

SELECT REPLACER_LENGTH('abcdef', 2, 3) AS SOMETEXT;
Copy

結果:

SOMETEXT|
--------|
bcd     |
Copy

UPPER

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列を大文字に変換します(Transact-SQL の UPPER)。

サンプルソースパターン

構文

SQL Server
UPPER( string_expression ) 
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

UPPER( <expr> )
Copy
JavaScript

JavaScript SQL 完全ドキュメント

 String.toUpperCase( )
Copy

SQL Server

SELECT UPPER('you are a prediction of the good ones') AS [UPPER]
Copy

出力:

+-------------------------------------|
|UPPER                                |
+-------------------------------------|
|YOU ARE A PREDICTION OF THE GOOD ONES|
+-------------------------------------|
Copy
Snowflake SQL
SELECT
UPPER('you are a prediction of the good ones') AS UPPER;
Copy

出力:

+-------------------------------------|
|UPPER                                |
+-------------------------------------|
|YOU ARE A PREDICTION OF THE GOOD ONES|
+-------------------------------------|
Copy
JavaScript
 CREATE OR REPLACE FUNCTION to_upper(str varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  return STR.toUpperCase();
$$;

SELECT TO_UPPER('you are a prediction of the good ones') UPPER;
Copy

\ 出力:

UPPER                                |
-------------------------------------|
YOU ARE A PREDICTION OF THE GOOD ONES|
Copy

ASCII

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

ASCII テーブル上の文字の番号コードを返します(Transact-SQL の ASCII)。

サンプルソースパターン

構文

ASCII( expression )
Copy

引数

: VARCVHAR または CHAR 式。

返されるタイプ

INT

クエリ

SELECT ASCII('A') AS A , ASCII('a') AS a;
Copy

結果

          A|          a|
-----------| ----------|
         65|         97|
Copy

JS の ASCII

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、 ASCII テーブル上の文字の番号コードを返します(JavaScript charCodeAt 関数ドキュメント)。

サンプルソースパターン

構文

 string.charCodeAt( [index] )
Copy
引数

インデックス(オプション): ASCII テーブルで文字を取得してコード番号を返す文字列のインデックス。このパラメーターが指定されない場合、デフォルトとして0を取ります。\

返されるタイプ

Int

クエリ

 CREATE OR REPLACE FUNCTION get_ascii(c char)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  return C.charCodeAt();
$$;

SELECT GET_ASCII('A') A, GET_ASCII('a') a;
Copy
結果
          A|          a|
-----------| ----------|
         65|         97|    
Copy

QUOTENAME

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

引用符で区切られた文字列を返します(Transact-SQL の QUOTENAME)。

サンプルソースパターン

構文

QUOTENAME( string_expression [, quote_character])
Copy

引数

string_expression: 区切る文字列。

quote_character: 文字列を区切る1文字。

返されるタイプ

NVARCHAR(258)。引用符が(')、([])、(")、( () )、( >< )、({})、または(`)と異なる場合はnullになります。

クエリ

SELECT QUOTENAME('Hello', '`') AS HELLO;
Copy

結果

    HELLO|      
---------|
  `Hello`|  
Copy

JS の QUOTENAME

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

残念ながら、この関数は JavaScript では利用できませんが、定義済みの関数を使って実装することができます。

サンプルソースパターン

実装例

 function QUOTENAME(string, quote){
    return quote.concat(string, quote);
}
Copy
引数

string: 区切る文字列式。

quote: 区切り文字として使用される引用符。

返されるタイプ

文字列。

クエリ

CREATE OR REPLACE FUNCTION QUOTENAME(str varchar, quote char)
RETURNS string
LANGUAGE JAVASCRIPT
AS
$$
  function QUOTENAME(string, quote){
    const allowed_quotes = /[\']|[\"]|[(]|[)]|[\[]|[\]]|[\{]|[\}]|[\`]/;
    
    if(!allowed_quotes.test(quote)) throw new TypeError('Invalid Quote');
    
    return quote.concat(string, quote);
  }
   return QUOTENAME(STR, QUOTE);
$$;

SELECT QUOTENAME('Hola', '`') HELLO;
Copy
結果
    HELLO|      
---------|
  `Hello`| 
Copy

CONCAT_WS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列値と文字列値の間にセパレーターを使用した連結を行います(Transact-SQL の CONCAT_WS)。

サンプルソースパターン

構文

CONCAT_WS( separator, expression1, ... ,expressionN )
Copy

引数

separator: 結合するセパレーター。

expression1, ... ,expressionN: 文字列に変換する式。

返されるタイプ

文字列値、受け取った入力に依存します。

クエリ

SELECT CONCAT_WS(' ', 'Mariah','Carey') AS NAME;
Copy

結果

        NAME|      
------------|
Mariah Carey|
Copy

JS の結合

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列引数をセパレーターを使用して呼び出し文字列に連結します(JavaScript 結合関数ドキュメント)。

サンプルソースパターン

構文

 Array.join( separator )
Copy
引数

separator: 結合する文字。

返されるタイプ

文字列

クエリ

 CREATE OR REPLACE FUNCTION join_strs(separator varchar, strings array)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  return STRINGS.join(SEPARATOR);
$$;
SELECT join_strs(' ',array_construct('Mariah','Carey')) NAME;
Copy
結果
        NAME|      
------------|
Mariah Carey|   
Copy

SOUNDEX

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

2つの文字列の類似性を評価するための4文字のコードを返します(Transact-SQL の SOUNDEX)。

サンプルソースパターン

構文

SOUNDEX( string_expression )
Copy

引数

string_expression: 反転する文字列式。

返されるタイプ

パラメーターとして送られる文字列式と同じデータ型。

クエリ

SELECT SOUNDEX('two') AS TWO , SOUNDEX('too') AS TOO;
Copy

結果

      TWO|      TOO|
---------|---------|
     T000|     T000|
Copy

JS の SOUNDEX

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

残念ながら、 JavaScript は SOUNDEX アルゴリズムを実行するメソッドを提供していませんが、手動で実装することは可能です。

サンプルソースパターン

実装例

 const dic = {A:0, B:1, C:2, D:3, E:0, F:1, G:2, H:0, I:0, J:2, K:2, L:4, M:5, N:5, O:0, P:1, Q:2, R:6, S:2, T:3, U:0, V:1, W:0, X:2, Y:0, Z:2};

  function getCode(letter){
      return dic[letter.toUpperCase()];
  }

  function SOUNDEX(word){
    var initialCharacter = word[0].toUpperCase();
    var initialCode = getCode(initialCharacter);
    for(let i = 1; i < word.length; ++i) {
        const letterCode = getCode(word[i]);
        if (letterCode && letterCode != initialCode) {
             initialCharacter += letterCode;
             if(initialCharacter.length == 4) break;
        }
        initialCode = letterCode;
    }
      
      return initialCharacter.concat( '0'.repeat( 4 - initialCharacter.length));
      
  }
Copy
引数

word: 文字列式で SOUNDEX の等価性を取得します。

返されるタイプ

文字列。

クエリ

 CREATE OR REPLACE FUNCTION get_soundex(str varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  const dic = {A:0, B:1, C:2, D:3, E:0, F:1, G:2, H:0, I:0, J:2, K:2, L:4, M:5, N:5, O:0, P:1, Q:2, R:6, S:2, T:3, U:0, V:1, W:0, X:2, Y:0, Z:2};

  function getCode(letter){
      return dic[letter.toUpperCase()];
  }

  function SOUNDEX(word){
    var initialCharacter = word[0].toUpperCase();
    var initialCode = getCode(initialCharacter);
    for(let i = 1; i < word.length; ++i) {
        const letterCode = getCode(word[i]);
        if (letterCode && letterCode != initialCode) {
             initialCharacter += letterCode;
             if(initialCharacter.length == 4) break;
        }
        initialCode = letterCode;
    }
    
    return initialCharacter.concat( '0'.repeat( 4 - initialCharacter.length));    
  }
  
  return SOUNDEX( STR );
$$;

SELECT GET_SOUNDEX('two') AS TWO , GET_SOUNDEX('too') AS TOO;
Copy
結果
      TWO|      TOO|
---------|---------|
     T000|     T000| 
Copy

REVERSE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

文字列を反転します(Transact-SQL の REVERSE)。

サンプルソースパターン

構文

REVERSE( string_expression )
Copy

引数

string_expression: 反転する文字列式。

返されるタイプ

パラメーターとして送られる文字列式と同じデータ型。

クエリ

SELECT REVERSE('rotator') AS PALINDROME;
Copy

結果

      PALINDROME|      
----------------|
         rotator|  
Copy

JS の反転

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

残念ながら、この関数は JavaScript では利用できませんが、定義済みの関数を使って実装することができます。

サンプルソースパターン

実装例

 function REVERSE(string){
    return string.split("").reverse().join("");
}
Copy
引数

string: 反転する文字列式。

返されるタイプ

文字列。

クエリ

 CREATE OR REPLACE FUNCTION REVERSE(str varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
   return STR.split("").reverse().join("");
$$;

SELECT REVERSE('rotator') PALINDROME;
Copy
結果
      PALINDROME|      
----------------|
         rotator|  
Copy

STRING_ESCAPE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

テキストの特殊文字をエスケープし、エスケープされた文字を含むテキストを返します。(Transact-SQL の STRING_ESCAPE)。

サンプルソースパターン

構文

STRING_ESCAPE( text, type )
Copy

引数

text: 文字をエスケープするテキスト。

type: 文字をエスケープする形式型。現在、 JSON が唯一サポートされている形式です。

返されるタイプ

VARCHAR

クエリ

SELECT STRING_ESCAPE('\   /  \\    "     ', 'json') AS [ESCAPE];  
Copy

結果

ESCAPE|
--------------------------|
  \\   \/  \\\\    \"     |
Copy

JS のstringify

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

オブジェクトを JSON 文字列形式に変換します(JavaScript stringify関数ドキュメント)。

サンプルソースパターン

構文

 JSON.stringify( value )
Copy
引数

value: 変換するオブジェクト式。

返されるタイプ

文字列。

クエリ

 CREATE OR REPLACE FUNCTION string_escape (str varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
   return JSON.stringify( STR );
$$;

SELECT STRING_ESCAPE('\   /  \\    "     ') ESCAPE;
Copy
結果
                    ESCAPE|
--------------------------|
  \\   \/  \\\\    \"     | 
Copy

TRIM

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

空白を含まない文字式を返します(Transact-SQL の TRIM)。

サンプルソースパターン

構文

TRIM( string_expression )
Copy

引数

string_expression: 変換する文字列式。

返されるタイプ

VARCHAR または NVARCHAR

SQL Server

SELECT TRIM('  FIRST AND LAST TWO BLANK SPACES  ') AS [TRIM];
Copy

出力:

+-------------------------------|
|TRIM                           |
+-------------------------------|
|FIRST AND LAST TWO BLANK SPACES|
+-------------------------------|
Copy

Snowflake SQL

SELECT TRIM('  FIRST AND LAST TWO BLANK SPACES  ') AS TRIM;
Copy

出力:

+-------------------------------|
|TRIM                           |
+-------------------------------|
|FIRST AND LAST TWO BLANK SPACES|
+-------------------------------|
Copy

JS のtrim

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送られた新しいパターンを使って、出現するパターンを置き換えます(JavaScript Replace関数ドキュメント)。

サンプルソースパターン

構文

 String.trim( )
Copy
引数

この関数はパラメーターを受け取りません。

返されるタイプ

文字列。

クエリ

 CREATE OR REPLACE FUNCTION TRIM_STR(str varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
   return STR.trim( );
$$;

SELECT TRIM_STR('  FIRST AND LAST TWO BLANK SPACES  ')TRIM
Copy
結果
                           TRIM|      
-------------------------------|
FIRST AND LAST TWO BLANK SPACES|   
Copy

DIFFERENCE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

SOUNDEX アルゴリズムを使用して、2つの文字列の差を測定する整数を返します。(Transact-SQL の DIFFERENCE)。\ SOUNDEX アルゴリズムを実行して生成された文字列の共通文字をカウントします。

サンプルソースパターン

構文

DIFFERENCE( expression1, expression1 )
Copy

引数

expression1, expression2: 比較する文字列式。

返されるタイプ

Int

クエリ

SELECT DIFFERENCE('Like', 'Mike');
Copy

結果

    Output |
-----------|
         3 |
Copy

JS の DIFFERENCE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

残念ながら、この機能は JS では利用できませんが、簡単に実装することができます。

注釈

この関数は SOUNDEX アルゴリズムの実装を必要とします。

サンプルソースパターン

実装例

 function DIFFERENCE(strA, strB) {
    var count = 0;
    for (var i = 0; i < strA.length; i++){
       if ( strA[i] == strB[i] ) count++; 
    }
    
    return count;
}
Copy
引数

strA, strB: SOUNDEX アルゴリズムを実行した結果の文字列式。

返されるタイプ

文字列

クエリ

 CREATE OR REPLACE FUNCTION SOUNDEX_DIFFERENCE(str_1 varchar, str_2 varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
    function DIFFERENCE(strA, strB) {
      var count = 0;
      for (var i = 0; i < strA.length; i++){
         if ( strA[i] == strB[i] ) count++; 
      }
    
    return count;
    }
    
    return DIFFERENCE(STR_1, STR_2);
$$;

SELECT SOUNDEX_DIFFERENCE(GET_SOUNDEX('two'), GET_SOUNDEX('too')) DIFFERENCE;
Copy
結果
   DIFFERENCE|
-------------|
            4| 
Copy

FORMAT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定した形式とオプションのカルチャーで形式化された値を返します(Transact-SQL の FORMAT)。

サンプルソースパターン

構文

FORMAT( value, format [, culture])
Copy

引数

value: 形式を指定する文字列式。

format: 希望する形式。

culture(オプション): カルチャーを指定する NVarchar 引数。指定されていない場合は、現在のセッションの言語を使用します。

返されるタイプ

cultureパラメーターが無効な場合は NULL、それ以外の場合は次のデータ型に従います。

カテゴリ

.NET 型

数値

bigint

Int64

数値

int

Int32

数値

smallint

Int16

数値

tinyint

Byte

数値

decimal

SqlDecimal

数値

数値

SqlDecimal

数値

float

Double

数値

real

Single

数値

smallmoney

10進数

数値

money

10進数

日付と時刻

date

DateTime

日付と時刻

time

TimeSpan

日付と時刻

datetime

DateTime

日付と時刻

smalldatetime

DateTime

日付と時刻

datetime2

DateTime

日付と時刻

datetimeoffset

DateTimeOffset

クエリ

SELECT FORMAT(CAST('2022-01-24' AS DATE), 'd', 'en-gb')  AS 'Great Britain';
Copy

結果

  GREAT BRITAIN|
---------------|
     24/01/2022|  
Copy
クエリ
SELECT FORMAT(244900.25, 'C', 'cr-CR')  AS 'CURRENCY';
Copy
結果

CURRENCY

₡244,900.25

JS の FORMAT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

JavaScript には、日付や整数値を形式化するさまざまな関数があります。残念ながら、これらの機能は1つのメソッドに統合されていません。

DateTime 値

構文

 Intl.DateTimeFormat( format ).format( value )
Copy
引数

locales (オプション): 適用する形式の文字列式。

options (オプション): 数値式の形式のためにサポートされるさまざまなプロパティを持つオブジェクト(JavaScript NumberFormat 関数ドキュメント)。

value: 形式を指定する数値式。

返されるタイプ

文字列

数値

構文

 Intl.NumberFormat( [locales [, options]] ).format( value )
Copy
引数

locales (オプション): 適用する形式の文字列式。

options (オプション): 数値式の形式のためにサポートされるさまざまなプロパティを持つオブジェクト(JavaScript NumberFormat 関数ドキュメント)。

value: 形式を指定する数値式。

返されるタイプ

文字列

DateTime

クエリ
 CREATE OR REPLACE FUNCTION format_date(date timestamp, format varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  return new Intl.DateTimeFormat( FORMAT ).format( DATE );
$$;
SELECT FORMAT_DATE(TO_DATE('2022-01-24'), 'en-gb') GREAT_BRITAIN;
Copy
結果
  GREAT_BRITAIN|      
---------------|
     24/01/2022|  
Copy

数値

クエリ
 CREATE OR REPLACE FUNCTION format_numeric(number float, locales varchar, options variant)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  return new Intl.NumberFormat( LOCALES , OPTIONS ).format( NUMBER );
$$;
SELECT FORMAT_NUMERIC(244900.25, 'de-DE', PARSE_JSON('{ style: "currency", currency: "CRC" }')) CURRENCY;
Copy
結果
       CURRENCY|      
---------------|
 244.900,25 CRC|  
Copy

PATINDEX

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定した式で、最初に出現するパターンの開始位置を返します(Transact-SQL の PATINDEX)。

サンプルソースパターン

構文

PATINDEX( pattern, expression )
Copy

引数

pattern: 探すパターン。

expression: 検索する式。

返されるタイプ

整数。パターンが見つからない場合は0を返します。

クエリ

SELECT PATINDEX( '%on%', 'No, no, non esistono più') AS [PATINDEX]
Copy

結果

    PATINDEX|      
------------|
          10|  
Copy

JS の検索

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

REGEX を使用して、パターンのインデックスを検索します(JavaScript 検索関数ドキュメント)。

サンプルソースパターン

構文

 String.search( regex )
Copy
引数

regex: 希望するパターンにマッチする正規表現。

返されるタイプ

整数。パターンが文字列のどの部分とも一致しない場合は-1を返します。

クエリ

 CREATE OR REPLACE FUNCTION get_index_pattern(pattern varchar, str varchar)
  RETURNS float
  LANGUAGE JAVASCRIPT
AS
$$
  function GET_PATTERN(pattern, string){
    return string.search(new RegExp( pattern ));
    }
   return GET_PATTERN(PATTERN, STR) + 1;
$$;

SELECT GET_INDEX_PATTERN('on+', 'No, no, non esistono più') PATINDEX;
Copy
結果
    PATINDEX|      
------------|
          10|  
Copy

STR

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

数値データを文字データに変換して返します。文字データは右寄せで、長さと10進数の精度が指定されます。(Transact-SQL の STR)。

サンプルソースパターン

構文

SQL Server

STR ( float_expression [ , length [ , decimal ] ] ) 
Copy
Snowflake SQL
STR_UDF( numeric_expression, number_format )
Copy

引数

numeric_expression: 小数点を含むFloat式。

length (オプション): ポイント表記、10進数、float部分を含む、返される式の長さ。

decimal (オプション): 小数点以下の桁数です。

返されるタイプ

VARCHAR

SQL Server

入力:

/* 1 */
SELECT STR(123.5);

/* 2 */
SELECT STR(123.5, 2);

/* 3 */
SELECT STR(123.45, 6);

/* 4 */
SELECT STR(123.45, 6, 1);
Copy

出力:

1) 124
2) **
3) 123
4) 123.5
Copy

Snowflake SQL

入力:

/* 1 */
SELECT
PUBLIC.STR_UDF(123.5, '99999');

/* 2 */
SELECT
PUBLIC.STR_UDF(123.5, '99');

/* 3 */
SELECT
PUBLIC.STR_UDF(123.45, '999999');

/* 4 */
SELECT
PUBLIC.STR_UDF(123.45, '9999.9');
Copy

出力:

1) 124

2) ##

3) 123
4) 123.5
Copy

JS の STR

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

残念ながら、この機能は JS では利用できませんが、文字列用の定義済み関数を使えば簡単に実装できます。

サンプルソースパターン

実装例

 function validLength(number, max_length, float_precision) {
  var float_point = number.match(/[\.][0-9]+/);
  /*if the number does not have point float, checks if the float precision 
   * and current number are greater than max_length
   */
   if(!float_point) return number.length + float_precision + 1 < max_length; 
    //removes the '.' and checks if there is overflow with the float_precision
    return number.length - float_point[0].trim('.').length + float_precision  < max_length;
} 
 function STR(number, max_length, float_precision) {
  var number_str = number.toString();
   //if the expression exceeds the max_length, returns '**'
   if(number_str.length > max_length || float_precision > max_length) return '**';
   if(validLength(number_str, max_length, float_precision)) {
      return number.toFixed(float_precision);
    }
    return number.toFixed(max_length - float_precision);
}
Copy
引数

number: 小数点を含むFloat式。

max_length: ポイント表記、10進数、float部分を含む、返される式の長さ。

float_precision: 小数点以下の桁数です。

返されるタイプ

文字列。

クエリ

 CREATE OR REPLACE FUNCTION STR(number float, max_length float, float_precision float)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
    function validLength(number, max_length, float_precision) {
        var float_point = number.match(/[\.][0-9]+/);
        if(!float_point) return number.length + float_precision + 1 < max_length; 
        return number.length - float_point[0].trim('.').length + float_precision  < max_length;
    } 
    function STR(number, max_length, float_precision) {
      var number_str = number.toString();
      if(number_str.length > max_length || float_precision > max_length) return '**';
      if(validLength(number_str, max_length, float_precision)) {
        return number.toFixed(float_precision);
      }
      return number.toFixed(max_length - float_precision);
    }
    return STR( NUMBER, MAX_LENGTH, FLOAT_PRECISION );
$$;

SELECT STR(12345.674, 12, 6);
Copy
結果
           STR|
--------------|
  12345.674000| 
Copy

LTRIM

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

先頭の空白を除去した文字式を返します(Transact-SQL の LTRIM)。

サンプルソースパターン

構文

LTRIM( string_expression )
Copy

引数

string_expression: 変換する文字列式。

返されるタイプ

VARCHAR または NVARCHAR

クエリ

SELECT LTRIM('  FIRST TWO BLANK SPACES') AS [LTRIM]
Copy

結果

                 LTRIM|      
----------------------|
FIRST TWO BLANK SPACES|  
Copy

JS の LTRIM

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

残念ながら、この関数は JavaScript では利用できませんが、正規表現を使って実装することができます。

サンプルソースパターン

実装例

 function LTRIM(string){
    return string.replace(/^s+/,"");
}
Copy
引数

string: 空白を除去する文字列式。

返されるタイプ

文字列。

クエリ

 CREATE OR REPLACE FUNCTION ltrim(str varchar)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  function LTRIM(string){
    return string.replace(/^s+/,"");
    }
   return LTRIM(S TR );
$$;

SELECT LTRIM('  FIRST TWO BLANK SPACES') AS LTRIM;
Copy
結果
                 LTRIM|      
----------------------|
FIRST TWO BLANK SPACES|  
Copy

ランキング関数

このセクションでは、Transact-SQL のランキング関数とSnowflake SQL および JavaScript コードの同等の機能について、 SnowFlake のストアドプロシージャでの使用に焦点を当てて説明します。

DENSE_RANK

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

この関数は、結果セットパーティション内の各行の順位を、順位値にギャップがない状態で返します。特定の行の順位は、1にその行の前にある別個の順位値の数を足したものになります。(Transact-SQL の DENSE_RANK)。

サンプルソースパターン

構文

SQL Server
 DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

 DENSE_RANK( )
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '1' COLUMN '15' OF THE SOURCE CODE STARTING AT 'OVER'. EXPECTED 'BATCH' GRAMMAR. CODE '80'. **
--              OVER ( [ <partition_by_clause> ] < order_by_clause > )
Copy

SQL Server

SELECT TOP 10 BUSINESSENTITYID, NATIONALIDNUMBER, RANK() OVER (ORDER BY NATIONALIDNUMBER) AS RANK FROM HUMANRESOURCES.EMPLOYEE AS TOTAL
Copy

結果:

BUSINESSENTITYID|NATIONALIDNUMBER|DENSE_RANK|
----------------|----------------|----------|
              57|10708100        |         1|
              54|109272464       |         2|
             273|112432117       |         3|
               4|112457891       |         4|
             139|113393530       |         5|
             109|113695504       |         6|
             249|121491555       |         7|
             132|1300049         |         8|
             214|131471224       |         9|
              51|132674823       |        10|
Copy
Snowflake SQL
SELECT TOP 10
BUSINESSENTITYID,
NATIONALIDNUMBER,
RANK() OVER (ORDER BY NATIONALIDNUMBER) AS RANK
FROM
HUMANRESOURCES.EMPLOYEE AS TOTAL;
Copy

結果:

BUSINESSENTITYID|NATIONALIDNUMBER|DENSE_RANK|
----------------|----------------|----------|
              57|10708100        |         1|
              54|109272464       |         2|
             273|112432117       |         3|
               4|112457891       |         4|
             139|113393530       |         5|
             109|113695504       |         6|
             249|121491555       |         7|
             132|1300049         |         8|
             214|131471224       |         9|
              51|132674823       |        10|
Copy

関連 EWIs

  • SSC-EWI-0001: ソースコードの行に認識できないトークンがあります。

RANK

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

結果セットのパーティション内の各行の順位を返します。行の順位は1に当該行の前の順位の数を足したものになります。(Transact-SQL の RANK)。

サンプルソースパターン

構文

SQL Server
 RANK ( ) OVER ( [ partition_by_clause ] order_by_clause )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

 RANK( )
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '1' COLUMN '9' OF THE SOURCE CODE STARTING AT 'OVER'. EXPECTED 'BATCH' GRAMMAR. CODE '80'. **
--        OVER ( [ partition_by_clause ] order_by_clause )
Copy

SQL Server

SELECT TOP 10 BUSINESSENTITYID, NATIONALIDNUMBER, RANK() OVER (ORDER BY NATIONALIDNUMBER) AS RANK FROM HUMANRESOURCES.EMPLOYEE AS TOTAL
Copy

結果:

BUSINESSENTITYID|NATIONALIDNUMBER|RANK|
----------------|----------------|----|
              57|10708100        |   1|
              54|109272464       |   2|
             273|112432117       |   3|
               4|112457891       |   4|
             139|113393530       |   5|
             109|113695504       |   6|
             249|121491555       |   7|
             132|1300049         |   8|
             214|131471224       |   9|
              51|132674823       |  10|
Copy
Snowflake SQL
SELECT TOP 10
BUSINESSENTITYID,
NATIONALIDNUMBER,
RANK() OVER (ORDER BY NATIONALIDNUMBER) AS RANK
FROM
HUMANRESOURCES.EMPLOYEE AS TOTAL;
Copy

結果:

BUSINESSENTITYID|NATIONALIDNUMBER|RANK|
----------------|----------------|----|
              57|10708100        |   1|
              54|109272464       |   2|
             273|112432117       |   3|
               4|112457891       |   4|
             139|113393530       |   5|
             109|113695504       |   6|
             249|121491555       |   7|
             132|1300049         |   8|
             214|131471224       |   9|
              51|132674823       |  10|
Copy

関連 EWIs

  • SSC-EWI-0001: ソースコードの行に認識できないトークンがあります。

ROW_NUMBER

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

結果セットの出力に番号を付けます。具体的には、結果セットのパーティション内の行の連番を返します。各パーティションの最初の行は1から始まります。(Transact-SQL の ROW_NUMBER)。

サンプルソースパターン

構文

SQL Server
 ROW_NUMBER ( )   
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )  
Copy
Snowflake SQL

Snowflake SQL 完全ドキュメント

 ROW_NUMBER( )
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '2' COLUMN '5' OF THE SOURCE CODE STARTING AT 'OVER'. EXPECTED 'BATCH' GRAMMAR. CODE '80'. **
--    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
Copy

SQL Server

SELECT 
ROW_NUMBER() OVER(ORDER BY NAME  ASC) AS RowNumber, 
NAME
FROM HUMANRESOURCES.DEPARTMENT
Copy

出力:

RowNumber|NAME                      |
---------|--------------------------|
        1|Document Control          |
        2|Engineering               |
        3|Executive                 |
        4|Facilities and Maintenance|
        5|Finance                   |
        6|Human Resources           |
        7|Information Services      |
        8|Marketing                 |
        9|Production                |
       10|Production Control        |
       11|Purchasing                |
       12|Quality Assurance         |
       13|Research and Development  |
       14|Sales                     |
       15|Shipping and Receiving    |
       16|Tool Design               |
Copy
Snowflake SQL
SELECT
ROW_NUMBER() OVER(ORDER BY NAME ASC) AS RowNumber,
NAME
FROM
HUMANRESOURCES.DEPARTMENT;
Copy

出力:

RowNumber|NAME                      |
---------|--------------------------|
        1|Document Control          |
        2|Engineering               |
        3|Executive                 |
        4|Facilities and Maintenance|
        5|Finance                   |
        6|Human Resources           |
        7|Information Services      |
        8|Marketing                 |
        9|Production                |
       10|Production Control        |
       11|Purchasing                |
       12|Quality Assurance         |
       13|Research and Development  |
       14|Sales                     |
       15|Shipping and Receiving    |
       16|Tool Design               |
Copy

関連 EWIs

  • SSC-EWI-0001: ソースコードの行に認識できないトークンがあります。

論理関数

このセクションでは、Transact-SQL のロジック関数とSnowflake SQL および JavaScript コードの同等の機能について、 SnowFlake のストアドプロシージャでの使用に焦点を当てて説明します。

IIF

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

ブール式がtrueと評価されるかfalseと評価されるかに応じて、2つの値のどちらかを返します。(Transact-SQL の IIF)。

サンプルソースパターン

構文

SQL Server
IIF( boolean_expression, true_value, false_value )
Copy
Snowflake SQL

Snowflake SQL ドキュメント

IFF( <condition> , <expr1> , <expr2> )
Copy

SQL Server

SELECT IIF( 2 > 3, 'TRUE', 'FALSE' ) AS RESULT
Copy

結果:

RESULT|
------|
 FALSE|
Copy
Snowflake SQL
SELECT
IFF( 2 > 3, 'TRUE', 'FALSE' ) AS RESULT;
Copy

結果:

RESULT|
------|
 FALSE|
Copy

XML 関数

このセクションでは、Transact-SQL と SnowflakeSQL での XML 関数の変換について説明します。

クエリ

Applies to
  • SQL Server

警告

この変換は将来的に実現されるでしょう

説明

xml データ型のインスタンスに対して XQuery を指定します。結果は xml 型です。このメソッドは、型付けされていない XML のインスタンスを返します。(Transact-SQL のQuery())

サンプルソースパターン

次の例は、.query( )の変換の詳細です

SQL Server

入力
 CREATE TABLE xml_demo(object_col XML);

INSERT INTO xml_demo (object_col)
   SELECT
        '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

INSERT INTO xml_demo (object_col)
   SELECT
        '<Root>
<ProductDescription ProductID="2" ProductName="Skate">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

SELECT
    xml_demo.object_col.query('/Root/ProductDescription/Features/Warranty') as Warranty,
    xml_demo.object_col.query('/Root/ProductDescription/Features/Maintenance') as Maintenance
from xml_demo;
Copy
出力
 Warranty                                     | Maintenance                                                                          |
----------------------------------------------|--------------------------------------------------------------------------------------|
<Warranty>1 year parts and labor</Warranty>   | <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  |
<Warranty>1 year parts and labor</Warranty>   | <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  |
Copy
Snowflake SQL
入力
 CREATE OR REPLACE TABLE xml_demo (
    object_col VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - XML DATA TYPE CONVERTED TO VARIANT ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "07/11/2025",  "domain": "no-domain-provided" }}'
;

INSERT INTO xml_demo (object_col)
SELECT
        '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

INSERT INTO xml_demo (object_col)
SELECT
        '<Root>
<ProductDescription ProductID="2" ProductName="Skate">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

SELECT
    XMLGET(XMLGET(XMLGET(object_col, 'ProductDescription'), 'Features'), 'Warranty') as Warranty,
    XMLGET(XMLGET(XMLGET(object_col, 'ProductDescription'), 'Features'), 'Maintenance') as Maintenance
from
    xml_demo;
Copy
出力
 Warranty                                     | Maintenance                                                                          |
----------------------------------------------|--------------------------------------------------------------------------------------|
<Warranty>1 year parts and labor</Warranty>   | <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  |
<Warranty>1 year parts and labor</Warranty>   | <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  |
Copy

既知の問題

問題は見つかりませんでした。

関連 EWIs

  1. SSC-EWI-0036: データ型が別のデータ型に変換されました。

Applies to
  • SQL Server

警告

この変換は将来的に実現されるでしょう

説明

XML に対して XQuery を実行し、 SQL 型の値を返します。このメソッドはスカラー値を返します。(Transact-SQL のvalue())。

サンプルソースパターン

次の例は、.value( )の変換の詳細です

SQL Server

入力
 CREATE TABLE xml_demo(object_col XML);

INSERT INTO xml_demo (object_col)
   SELECT
        '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

INSERT INTO xml_demo (object_col)
   SELECT
        '<Root>
<ProductDescription ProductID="2" ProductName="Skate">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

SELECT
    xml_demo.object_col.value('(/Root/ProductDescription/@ProductID)[1]', 'int' ) as ID,
    xml_demo.object_col.value('(/Root/ProductDescription/@ProductName)[1]', 'varchar(max)' ) as ProductName,
    xml_demo.object_col.value('(/Root/ProductDescription/Features/Warranty)[1]', 'varchar(max)' ) as Warranty
from xml_demo;
Copy
出力
 ID | ProductName | Warranty               |
----|-------------|------------------------|
1   | Road Bike   | 1 year parts and labor |
2   | Skate       | 1 year parts and labor |
Copy
Snowflake SQL
入力
 CREATE OR REPLACE TABLE xml_demo (
    object_col VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - XML DATA TYPE CONVERTED TO VARIANT ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "07/11/2025",  "domain": "no-domain-provided" }}'
;

INSERT INTO xml_demo (object_col)
SELECT
        '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

INSERT INTO xml_demo (object_col)
SELECT
        '<Root>
<ProductDescription ProductID="2" ProductName="Skate">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>';

SELECT
    GET(XMLGET(object_col, 'ProductDescription'), '@ProductID') :: INT as ID,
    GET(XMLGET(object_col, 'ProductDescription'), '@ProductName') :: VARCHAR as ProductName,
    GET(XMLGET(XMLGET(XMLGET(object_col, 'ProductDescription'), 'Features'), 'Warranty', 0), '$') :: VARCHAR as Warranty
from
    xml_demo;
Copy
出力
 ID | PRODUCTNAME | WARRANRTY              |
----|-------------|------------------------|
1   | Road Bike   | 1 year parts and labor |
2   | Skate       | 1 year parts and labor |
Copy

既知の問題

問題は見つかりませんでした。

関連 EWIs

  1. SSC-EWI-0036: データ型が別のデータ型に変換されました。

集計関数

このセクションでは、Transact-SQL の集計関数とSnowflake SQL および JavaScript コードの同等の機能について、Snowflakeでの UDFs の作成に焦点を当てて説明します。

COUNT

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

この関数は、グループ内で見つかった項目の数を返します。COUNT は COUNT_BIG 関数のように動作します。これらの関数は、戻り値のデータ型が異なるだけです。COUNT は常にintデータ型の値を返します。COUNT_BIG は常にbigintデータ型の値を返します。(Transact-SQL の COUNT)。

サンプルソースパターン

構文

SQL Server
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] )
Copy

SQL Server

SELECT COUNT(NATIONALIDNUMBER) FROM HUMANRESOURCES.EMPLOYEE AS TOTAL;
Copy

結果:

TOTAL

290

Snowflake SQL
SELECT
COUNT(NATIONALIDNUMBER) FROM
HUMANRESOURCES.EMPLOYEE AS TOTAL;
Copy

結果:

TOTAL

290

COUNT_BIG

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

この関数は、グループ内で見つかった項目の数を返します。COUNT_BIG は、 COUNT 関数のように動作します。これらの関数は、戻り値のデータ型が異なるだけです。COUNT_BIG は常にbigintデータ型の値を返します。COUNT は常にintデータ型の値を返します。(Transact-SQL の COUNT_BIG)。

サンプルソースパターン

構文

SQL Server
COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] )
Copy

SQL Server

SELECT COUNT_BIG(NATIONALIDNUMBER) FROM HUMANRESOURCES.EMPLOYEE AS TOTAL;
Copy

結果:

TOTAL

290

Snowflake SQL
SELECT
COUNT(NATIONALIDNUMBER) FROM
HUMANRESOURCES.EMPLOYEE AS TOTAL;
Copy

結果:

TOTAL

290

SUM

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

式中のすべての値、または DISTINCT の値のみの合計を返します。SUM は数値列でのみ使用できます。Null値は無視されます。(Transact-SQL の SUM)。

サンプルソースパターン

構文

SQL Server
SUM ( [ ALL | DISTINCT ] expression )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

SUM( [ DISTINCT ] <expr1> )
Copy

SQL Server

SELECT SUM(VACATIONHOURS) FROM HUMANRESOURCES.EMPLOYEE AS TOTALVACATIONHOURS;
Copy

結果:

TOTALVACATIONHOURS

14678

Snowflake SQL
SELECT
SUM(VACATIONHOURS) FROM
HUMANRESOURCES.EMPLOYEE AS TOTALVACATIONHOURS;
Copy

結果:

TOTALVACATIONHOURS

14678

SnowConvert AI カスタム UDFs

説明

Transact-SQL 関数や動作の中には、Snowflakeで使用できないものや、動作が異なるものがあります。これらの違いを最小限にするため、一部の関数は SnowConvert AI カスタム UDFs に置き換えられます。

これらの UDFs は、移行中に、 出力 フォルダー内の UDF ヘルパー フォルダーに自動的に作成されます。カスタム UDF ごとに1つのファイルがあります。

OPENXML UDF

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

このカスタム UDF は、 XML ドキュメント上の行セットビューを処理するために追加されます。これは、行セットプロバイダーとして動作するため、宣言に使用されます。

このバージョンの UDF では、 オプションパラメーター と異なるノードタイプはサポートされていません。要素ノードはデフォルトで処理されます。

カスタム UDF オーバーロード

パラメーター

  1. XML: XML の読み取り可能な内容を表す VARCHAR

  2. PATH: 行として処理されるノードのパターンを含むvarchar。

UDF

CREATE OR REPLACE FUNCTION OPENXML_UDF(XML VARCHAR, PATH VARCHAR)
RETURNS TABLE(VALUE VARIANT)
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
SELECT VALUE from TABLE(FLATTEN(input=>XML_JSON_SIMPLE(PARSE_XML(XML)), path=>PATH))
$$;


CREATE OR REPLACE FUNCTION XML_JSON_SIMPLE(XML VARIANT)
RETURNS OBJECT
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
function toNormalJSON(xmlJSON) {
    var finalres = {};
    var name=xmlJSON['@'];
    var res = {};
    finalres[name] = res;
    for(var key in xmlJSON)
    {
        if (key == "@")
        {
            res["$name"] = xmlJSON["@"];
        }
        else if (key == "$") {
            continue;
        }
        else if (key.startsWith("@"))
        {
            // This is an attribute
            res[key]=xmlJSON[key];
        }
        else
        {
            var elements = xmlJSON['$']
            var value = xmlJSON[key];
            res[key] = [];
            if (Array.isArray(value))
            {
                for(var elementKey in value)
                {
                    var currentElement = elements[elementKey];
                    var fixedElement = toNormalJSON(currentElement);
                    res[key].push(fixedElement);
                }
            }
            else if (value === 0)
            {
                var fixedElement = toNormalJSON(elements);
                res[key].push(fixedElement);
            }
        }
    }
    return finalres;
}
return toNormalJSON(XML);
$$;
Copy
Transact-SQL
クエリ
DECLARE @idoc INT, @doc VARCHAR(1000);  
SET @doc ='  
<ROOT>  
<Customer CustomerID="VINET" ContactName="Paul Henriot">  
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">  
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>  
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>  
   </Order>  
</Customer>  
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">  
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">  
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>  
   </Order>  
</Customer>  
</ROOT>';  

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;  
 
SELECT *  FROM OPENXML (@idoc, '/ROOT/Customer',1)  
WITH (CustomerID  VARCHAR(10), ContactName VARCHAR(20)); 
Copy
結果
CustomerID  | ContactName
----------------------------|
VINET     | Paul Henriot
LILAS     | Carlos Gonzlez
Copy
Snowflake

注釈

以下の例は、環境変数が256バイトのストレージしかサポートしておらず、 XML のデモコードがその制限を超えて使用しているため、ストアドプロシージャに分離しています。

クエリ
DECLARE
IDOC INT;
DOC VARCHAR(1000);
BlockResultSet RESULTSET;
BEGIN
DOC := '  
<ROOT>  
<Customer CustomerID="VINET" ContactName="Paul Henriot">  
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">  
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>  
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>  
   </Order>  
</Customer>  
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">  
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">  
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>  
   </Order>  
</Customer>  
</ROOT>';
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0075 - TRANSLATION FOR BUILT-IN PROCEDURE 'sp_xml_preparedocument' IS NOT CURRENTLY SUPPORTED. ***/!!!

EXEC sp_xml_preparedocument :IDOC OUTPUT, :DOC;
BlockResultSet := (

SELECT
Left(value:Customer['@CustomerID'], '10') AS 'CustomerID',
Left(value:Customer['@ContactName'], '20') AS 'ContactName'
FROM
OPENXML_UDF(:IDOC, ':ROOT:Customer'));
RETURN TABLE(BlockResultSet);
END;
Copy
結果

CustomerID

ContactName

VINET

Paul Henriot

LILAS

Carlos Gonzlez

クエリ
SET code = '<ROOT>  
<Customer CustomerID="VINET" ContactName="Paul Henriot">  
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">  
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>  
   </Order>  
</Customer>  
</ROOT>';
SELECT
Left(value:Customer['@CustomerID'],10) as "CustomerID",  
Left(value:Customer['@ContactName'],20) as "ContactName"
FROM TABLE(OPENXML_UDF($code,'ROOT:Customer'));
Copy
結果

CustomerID

ContactName

VINET

Paul Henriot

既知の問題

問題は見つかりませんでした。

関連 EWIs

  1. SSC-EWI-TS0075: 組み込みプロシージャはサポートされていません。

STR UDF

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

このカスタム UDF は、数値データを文字データに変換します。

カスタム UDF オーバーロード

パラメーター

  1. FLOAT_EXPR: varcharに変換する数値式。

  2. FORMAT: 結果のvarcharの長さと小数点数を指定したvarchar式。この形式は SnowConvert で自動的に生成されます。

UDF
 CREATE OR REPLACE FUNCTION PUBLIC.STR_UDF(FLOAT_EXPR FLOAT, FORMAT VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
IMMUTABLE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
    TRIM(TRIM(SELECT TO_CHAR(FLOAT_EXPR, FORMAT)), '.')
$$;

CREATE OR REPLACE FUNCTION PUBLIC.STR_UDF(FLOAT_EXPR FLOAT)
RETURNS VARCHAR
LANGUAGE SQL
IMMUTABLE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
    STR_UDF(FLOAT_EXPR, '999999999999999999')
$$;
Copy
Transact-SQL
クエリ
SELECT
    STR(123.5) as A,
    STR(123.5, 2) as B,
    STR(123.45, 6) as C,
    STR(123.45, 6, 1) as D;
Copy
結果

A

B

C

D

124

**

123

123.5

Snowflake
クエリ
SELECT
    PUBLIC.STR_UDF(123.5, '99999') as A,
    PUBLIC.STR_UDF(123.5, '99') as B,
    PUBLIC.STR_UDF(123.45, '999999') as C,
    PUBLIC.STR_UDF(123.45, '9999.9') as D;
Copy

SWITCHOFFSET_UDF

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

このカスタム UDF は、保存されたタイムゾーンオフセットから指定された新しいタイムゾーンオフセットに変更されたdatetimeoffset値を返すために追加されます。

カスタム UDF オーバーロード

パラメーター

  1. source_timestamp: datetimeoffset(n)値に解決できる TIMESTAMP_TZ。

  2. target_tz: タイムゾーンオフセットを表すvarchar

UDF

CREATE OR REPLACE FUNCTION PUBLIC.SWITCHOFFSET_UDF(source_timestamp TIMESTAMP_TZ, target_tz varchar)
RETURNS TIMESTAMP_TZ
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS 
$$
WITH tz_values AS (
SELECT 
    RIGHT(source_timestamp::varchar, 5) as source_tz,
    
    REPLACE(source_tz::varchar, ':', '') as source_tz_clean,
    REPLACE(target_tz::varchar, ':', '') as target_tz_clean,
    
    target_tz_clean::integer - source_tz_clean::integer as offset,
    
    RIGHT(offset::varchar, 2) as tz_min,
    PUBLIC.OFFSET_FORMATTER(RTRIM(offset::varchar, tz_min)) as tz_hrs,
    
    
    TIMEADD( hours, tz_hrs::integer, source_timestamp ) as adj_hours,
    TIMEADD( minutes, (LEFT(tz_hrs, 1) || tz_min)::integer, adj_hours::timestamp_tz ) as new_timestamp
    
FROM DUAL)
SELECT 
    (LEFT(new_timestamp, 24) || ' ' || target_tz)::timestamp_tz
FROM tz_values
$$;

-- ==========================================================================
-- Description: The function OFFSET_FORMATTER(offset_hrs varchar) serves as
-- an auxiliar function to format the offter hours and its prefix operator.
-- ==========================================================================  
CREATE OR REPLACE FUNCTION PUBLIC.OFFSET_FORMATTER(offset_hrs varchar)
RETURNS varchar
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
CASE
   WHEN LEN(offset_hrs) = 0 THEN '+' || '0' || '0'
   WHEN LEN(offset_hrs) = 1 THEN '+' || '0' || offset_hrs
   WHEN LEN(offset_hrs) = 2 THEN
        CASE 
            WHEN LEFT(offset_hrs, 1) = '-' THEN '-' || '0' || RIGHT(offset_hrs, 1)
            ELSE '+' || offset_hrs
        END
    ELSE offset_hrs
END
$$;
Copy
Transact-SQL
クエリ
SELECT 
  '1998-09-20 7:45:50.71345 +02:00' as fr_time,
  SWITCHOFFSET('1998-09-20 7:45:50.71345 +02:00', '-06:00') as cr_time;  
Copy
結果
SELECT 
  '1998-09-20 7:45:50.71345 +02:00' as fr_time,
  SWITCHOFFSET('1998-09-20 7:45:50.71345 +02:00', '-06:00') as cr_time;  
Copy
Snowflake
クエリ
SELECT
  '1998-09-20 7:45:50.71345 +02:00' as fr_time,
  PUBLIC.SWITCHOFFSET_UDF('1998-09-20 7:45:50.71345 +02:00', '-06:00') as cr_time;
Copy
結果

fr_time

cr_time

1998-09-20 7:45:50.71345 +02:00

1998-09-19 23:45:50.7134500 -06:00

メタデータ関数

このセクションでは、Transact-SQL のメタデータ関数とSnowflake SQL および JavaScript コードの同等の機能について、 SnowFlake のストアドプロシージャでの使用に焦点を当てて説明します。

DB_NAME

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は指定されたデータベースの名前を返します。(Transact-SQL の DB_NAME)。

サンプルソースパターン

構文

SQL Server
 DB_NAME ( [ database_id ] )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

 CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/
Copy

SQL Server

SELECT DB_NAME();
Copy

結果:

RESULT

ADVENTUREWORKS2019

Snowflake SQL
SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
Copy

結果:

RESULT

ADVENTUREWORKS2019

既知の問題

1.CURRENT_DATABASE 関数は特定のケースで動作が異なります

DB_NAME 関数は、 database_id パラメーターで呼び出すことができ、指定されたデータベースの名前を返します。パラメーターがない場合、この関数は現在のデータベース名を返します。ただし、 SnowFlake はこのパラメーターをサポートしておらず、 CURRENT_DATABASE 関数は常に現在のデータベース名を返します。

関連 EWIs

  1. SSC-FDM-TS0010: CURRENT_DATABASE 関数は特定のケースで動作が異なります。

OBJECT_ID

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数はスキーマスコープオブジェクトのデータベースオブジェクト識別番号を返します。(Transact-SQL の OBJECT_ID)

SQL Server構文

 OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]   
  object_name' [ ,'object_type' ] )
Copy

サンプルソースパターン

1.デフォルトの変換

SQL Server
 IF OBJECT_ID_UDF('DATABASE2.DBO.TABLE1') is not null) THEN
            DROP TABLE IF EXISTS TABLE1;
        END IF;
Copy
Snowflake SQL
 BEGIN
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '1' COLUMN '0' OF THE SOURCE CODE STARTING AT 'IF'. EXPECTED 'If Statement' GRAMMAR. LAST MATCHING TOKEN WAS 'null' ON LINE '1' COLUMN '48'. FAILED TOKEN WAS ')' ON LINE '1' COLUMN '52'. CODE '70'. **
--IF OBJECT_ID_UDF('DATABASE2.DBO.TABLE1') is not null) THEN
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
DROP TABLE IF EXISTS TABLE1;
END;
Copy

2.不明なデータベース

SQL Server
 IF OBJECT_ID_UDF('DATABASE1.DBO.TABLE1') is not null) THEN
            DROP TABLE IF EXISTS TABLE1;
        END IF;
Copy
Snowflake SQL
  IF (
 OBJECT_ID_UDF('DATABASE1.DBO.TABLE1') is not null) THEN
     DROP TABLE IF EXISTS TABLE1;
 END IF;
Copy

3.異なるオブジェクト名

SQL Server
 IF OBJECT_ID_UDF('DATABASE1.DBO.TABLE2') is not null) THEN
            DROP TABLE IF EXISTS TABLE1;
        END IF;
Copy
Snowflake SQL
  IF (
 OBJECT_ID_UDF('DATABASE1.DBO.TABLE2') is not null) THEN
     DROP TABLE IF EXISTS TABLE1;
 END IF;
Copy

既知の問題

1.OBJECT_ID_UDF 関数は特定のケースで動作が異なります

OBJECT_ID はオブジェクト識別番号を返しますが、 OBJECT_ID_UDF はブール値を返すため、 OBJECT_ID がnullでない条件で使用される場合にのみそれらは同等になります。

関連 EWIs

  • SSC-EWI-0001: ソースコードの行に認識できないトークンがあります。

  • SSC-FDM-0007: 依存関係のない要素

分析関数

このセクションでは、Transact-SQL の分析関数とSnowflake SQL および JavaScript コードの同等の機能について、Snowflakeでの UDFs の作成に焦点を当てて説明します。

LAG

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

SQL Server 2012(11.x)から始まる自己結合を使用せずに、同じ結果セット内の前の行のデータにアクセスします。 LAG は現在の行の前にある、任意の物理オフセットの行へのアクセスを提供します。 現在の行の値と前の行の値を比較するには、 SELECT ステートメントでこの分析関数を使用します。( Transact-SQL における COUNT )。

サンプルソースパターン

構文

SQL Server
LAG (scalar_expression [,offset] [,default])  
    OVER ( [ partition_by_clause ] order_by_clause )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

COUNT( [ DISTINCT ] <expr1> [ , <expr2> ... ] )
Copy

SQL Server

SELECT TOP 10 
LAG(E.VacationHours,1) OVER(ORDER BY E.NationalIdNumber) as PREVIOUS,
E.VacationHours AS ACTUAL 
FROM HumanResources.Employee E
Copy

結果:

PREVIOUS

ACTUAL

NULL

10

10

89

89

10

10

48

48

0

0

95

95

55

55

67

67

84

84

85

Snowflake SQL
SELECT TOP 10
LAG(E.VacationHours,1) OVER(ORDER BY E.NationalIdNumber) as PREVIOUS,
E.VacationHours AS ACTUAL
FROM
HumanResources.Employee E;
Copy

結果:

PREVIOUS

ACTUAL

NULL

10

10

89

89

10

10

48

48

0

0

95

95

55

55

67

67

84

84

85

データ型関数

このセクションでは、Transact-SQL とSnowflake SQL および JavaScript コードでのデータ型関数の相当する機能を説明します。

DATALENGTH

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、任意の式を表現するために使用されるバイト数を返します。(Transact-SQL の DATALENGTH)。

サンプルソースパターン

構文

SQL Server
DATALENGTH ( expression )   
Copy
Snowflake SQL

Snowflake SQL ドキュメント

OCTET_LENGTH(<string_or_binary>)
Copy

SQL Server

SELECT DATALENGTH('SomeString') AS SIZE;
Copy

結果:

SIZE

10

Snowflake SQL
SELECT OCTET_LENGTH('SomeString') AS SIZE;
Copy

結果:

SIZE

10

数学関数

このセクションでは、Transact-SQL の数学関数とSnowflake SQL および JavaScript コードの同等の機能について、 SnowFlake のストアドプロシージャでの使用に焦点を当てて説明します。

ABS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された数値式の絶対値(正の値)を返す数学関数。(ABS は負の値を正の値に変更します。ABS はゼロまたは正の値には影響しません。) (Transact-SQL の ABS)。

サンプルソースパターン

構文

SQL Server
ABS( expression )
Copy
Snowflake SQL

Snowflake SQL ドキュメント

ABS( <num_expr> )
Copy
JavaScript

JavaScript 完全ドキュメント

Math.abs( expression )
Copy

SQL Server

SELECT ABS(-5);
Copy

結果:

ABS(-5)

5

Snowflake SQL
SELECT ABS(-5);
Copy

結果:

ABS(-5)

5

JavaScript
CREATE OR REPLACE FUNCTION compute_abs(a float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  return Math.abs(A);
$$
;
SELECT COMPUTE_ABS(-5);
Copy

結果:

COMPUTE_ABS(-5)

5

AVG

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

注釈

SnowConvert AI ヘルパーコードセクションは省略されます。

この関数は、グループ内の値の平均を返します。null値は無視されます。(Transact-SQL の AVG)。

サンプルソースパターン

構文

SQL Server
AVG ( [ ALL | DISTINCT ] expression )  
   [ OVER ( [ partition_by_clause ] order_by_clause ) ]
Copy
Snowflake SQL

Snowflake SQL ドキュメント

AVG( [ DISTINCT ] <expr1> )

AVG( [ DISTINCT ] <expr1> ) OVER (
                                 [ PARTITION BY <expr2> ]
                                 [ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
                                 )
Copy

SQL Server

SELECT AVG(VACATIONHOURS) AS AVG_VACATIONS FROM HUMANRESOURCES.EMPLOYEE;
Copy

結果:

AVG_VACATIONS

50

Snowflake SQL
SELECT AVG(VACATIONHOURS) AS AVG_VACATIONS FROM HUMANRESOURCES.EMPLOYEE;
Copy

結果:

AVG_VACATIONS

50

CEILING

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送られた数値より大きい/等しい、最も小さい整数を返す数学関数(Transact-SQL の CEILING)。

サンプルソースパターン

構文

SQL Server
CEILING( expression )
Copy
Snowflake SQL
CEIL( <input_expr> [, <scale_expr> ] )
Copy
JavaScript
 Math.ceil( expression )
Copy

SQL Server

SELECT CEILING(642.20);
Copy

結果:

CEILING(642.20)

643

Snowflake SQL
SELECT CEIL(642.20);
Copy

結果:

CEIL(642.20)

643

JavaScript
CREATE OR REPLACE FUNCTION compute_ceil(a double)
RETURNS double
LANGUAGE JAVASCRIPT
AS
$$
  return Math.ceil(A);
$$
;
SELECT COMPUTE_CEIL(642.20);
Copy

結果:

COMPUTE_CEIL(642.20)|
--------------------|
                 643|
Copy

FLOOR

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された数値式以下の最大の整数を返します。(Transact-SQL の FLOOR)。

サンプルソースパターン

構文

SQL Server
FLOOR ( numeric_expression )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

FLOOR( <input_expr> [, <scale_expr> ] )
Copy

SQL Server

SELECT FLOOR (124.87) AS FLOOR;
Copy

結果:

FLOOR|
-----|
  124|
Copy
Snowflake SQL
SELECT FLOOR (124.87) AS FLOOR;
Copy

結果:

FLOOR|
-----|
  124|
Copy

POWER

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された式の値を指定された累乗で返します。(Transact-SQL の POWER)。

サンプルソースパターン

構文

SQL Server
POWER ( float_expression , y )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

POW(x, y)

POWER (x, y)
Copy

SQL Server

SELECT POWER(2, 10.0) AS IntegerResult
Copy

結果:

IntegerResult |
--------------|
          1024|
Copy
Snowflake SQL
SELECT POWER(2, 10.0) AS IntegerResult;
Copy

結果:

IntegerResult |
--------------|
          1024|
Copy

関連ドキュメント

ROUND

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された長さまたは精度で丸められた数値を返します。(Transact-SQL の ROUND)。

サンプルソースパターン

構文

SQL Server
ROUND ( numeric_expression , length [ ,function ] )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

ROUND( <input_expr> [, <scale_expr> ] )
Copy

SQL Server

SELECT ROUND(123.9994, 3) AS COL1, ROUND(123.9995, 3) AS COL2;  
Copy

結果:

COL1    |COL2    |
--------|--------|
123.9990|124.0000|
Copy
Snowflake SQL
SELECT ROUND(123.9994, 3) AS COL1,
ROUND(123.9995, 3) AS COL2;
Copy

結果:

COL1   | COL2  |
--------|------|
123.999|124.000|
Copy

関連ドキュメント

SQRT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された浮動小数点値の平方根を返します。(Transact-SQL の SQRT)。

サンプルソースパターン

構文

SQL Server
SQRT ( float_expression )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

SQRT(expr)
Copy

SQL Server

SELECT SQRT(25) AS RESULT;
Copy

結果:

RESULT|
------|
   5.0|
Copy
Snowflake SQL
SELECT SQRT(25) AS RESULT;
Copy

結果:

RESULT|
------|
   5.0|
Copy

SQUARE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された浮動小数点値の平方を返します。(Transact-SQL の SQUARE)。

サンプルソースパターン

構文

SQL Server
SQUARE ( float_expression )  ****
Copy
Snowflake SQL

Snowflake SQL ドキュメント

SQUARE(expr)
Copy

SQL Server

SELECT SQUARE (5) AS SQUARE;
Copy

結果:

SQUARE|
------|
  25.0|
Copy
Snowflake SQL
SELECT SQUARE (5) AS SQUARE;
Copy

結果:

SQUARE|
------|
    25|
Copy

STDEV

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

指定された式のすべての値の統計標準偏差を返します。(Transact-SQL の STDEV)。

サンプルソースパターン

構文

SQL Server
 STDEV ( [ ALL | DISTINCT ] expression )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

 STDDEV( [ DISTINCT ] <expression_1> )
Copy

SQL Server

SELECT
    STDEV(VACATIONHOURS)
FROM
    HUMANRESOURCES.EMPLOYEE AS STDEV;
Copy

結果:

           STDEV|
----------------|
28.7862150320948|
Copy
Snowflake SQL
SELECT
    STDDEV(VACATIONHOURS)
FROM
    HUMANRESOURCES.EMPLOYEE AS STDEV;
Copy

結果:

       STDEV|
------------|
28.786215034|
Copy

STDEVP

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

指定された式のすべての値に対する母集団の統計標準偏差を返します。(Transact-SQL の STDVEP)。

サンプルソースパターン

構文

SQL Server
STDEVP ( [ ALL | DISTINCT ] expression )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

STDDEV_POP( [ DISTINCT ] expression_1)
Copy

SQL Server

SELECT
    STDEVP(VACATIONHOURS) AS STDEVP_VACATIONHOURS
FROM
    HumanResources.Employee;
Copy

結果:

STDEVP_VACATIONHOURS|
--------------------|
  28.736540767245085|
Copy
Snowflake SQL
SELECT
    STDDEV_POP(VACATIONHOURS) AS STDEVP_VACATIONHOURS
FROM
    HumanResources.Employee;
Copy

結果:

STDEVP_VACATIONHOURS|
--------------------|
        28.736540763|
Copy

VAR

Applies to
  • SQL Server

  • Azure Synapse Analytics

注釈

わかりやすくするため、出力コードの一部を省略しています。

説明

指定された式のすべての値の統計的分散を返します。(Transact-SQL の VAR)。

サンプルソースパターン

構文

SQL Server
VAR ( [ ALL | DISTINCT ] expression )  
Copy
Snowflake SQL
VAR_SAMP( [DISTINCT] <expr1> )
Copy

SQL Server

SELECT
    VAR(VACATIONHOURS)
FROM
    HUMANRESOURCES.EMPLOYEE AS VAR;
Copy

結果:

             VAR|
----------------|
28.7862150320948|
Copy
Snowflake SQL
SELECT
    VAR_SAMP(VACATIONHOURS)
FROM
    HUMANRESOURCES.EMPLOYEE AS VAR;
Copy

結果:

       VAR|
----------|
828.646176|
Copy

POWER

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された式の値を特定の累乗で返します。\ (Transact-SQL の POWER)。

サンプルソースパターン

構文

POWER( base, exp )
Copy

引数

base: 数値のベース。float式である必要があります。\ exp: 底上げする累乗。

返されるタイプ

戻り値の型は入力式に依存します。

Input TypeReturn Type
float, realfloat
decimal(p, s)decimal(38, s)
int, smallint, tinyintint
bigintbigint
money, smallmoneymoney
bit, char, nchar, varchar, nvarcharfloat

クエリ

SELECT POWER(2, 3)
Copy

結果

POWER(2, 3)|
-----------|
        8.0|
Copy

JS の POW

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指数累乗のベースを返します。\ (JavaScript POW 関数ドキュメント)。

サンプルソースパターン

構文

 Math.pow( base, exp )
Copy
引数

base: 数値のベース。float式である必要があります。\ exp: 底上げする累乗。

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

 CREATE OR REPLACE FUNCTION compute_pow(base float, exp float)
  RETURNS float
  LANGUAGE JAVASCRIPT
AS
$$
    return Math.pow(BASE, EXP);
$$
;
SELECT COMPUTE_POW(2, 3);
Copy
結果
COMPUTE_POW(2, 3)|
-----------------|
                8|
Copy

ACOS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送られた数値のラジアン単位のアークコサインを返す関数(Transact-SQL の ACOS)。

数学的には、アークコサインはコサインの逆関数であり、次のように定義されます:\ $$y = cos^{-1} \Leftrightarrow x = cos(y)$$

For $$y = cos^{-1}(x)$$:
- Range: $$0\leqslant y \leqslant \pi$$ or $$0^{\circ}\leqslant y \leqslant 180^{\circ}$$
- Domain: $$-1\leqslant x \leqslant 1$$

サンプルソースパターン

構文

ACOS ( expression )
Copy

引数

expression: 数値の float 式。式は$$[-1,1]$$内にあります。

返されるタイプ

0~πの数値float式。パラメーターで送られた数値式が$$[-1, 1]$$の領域外である場合、データベースエンジンはエラーを投げます。

クエリ

SELECT ACOS(-1.0);
Copy

結果

ACOS(-1.0)       |
-----------------|
3.141592653589793|
Copy

JS の ACOS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定した数値のアークコサインを返す関数\ (JavaScript ACOS 関数ドキュメント)。

サンプルソースパターン

構文

 Math.acos( expression )
Copy
引数

expression: 数値式。式は$$[-1,1]$$内にあります。

返されるタイプ

0~πの数値式。パラメーターで送られた数値式がラジアン単位のアークコサイン$$[-1, 1]$$の範囲外の場合、関数は NaN を返します。

クエリ

 CREATE OR REPLACE FUNCTION compute_acos(a double)
  RETURNS double
  LANGUAGE JAVASCRIPT
AS
$$
  return Math.acos(A);
$$
;
SELECT COMPUTE_ACOS(-1);
Copy
結果
COMPUTE_ACOS(-1)|
---------------|
    3.141592654|
Copy

ASIN

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送られた数値のラジアン単位のアークサインを返す関数(Transact-SQL の ASIN)。

アークサインはサインの逆関数であり、次の定義にまとめられます:\ $$y = sin^{-1} \Leftrightarrow x = sin(x)$$

For $$y = sin^{-1}(x)$$:\ - Range: $$-\frac{\pi}{2}\leqslant y \leqslant \frac{\pi}{2}$$ or $$-90^{\circ}\leqslant y \leqslant 90^{\circ}$$\ - Domain: $$-1\leqslant x \leqslant 1$$

サンプルソースパターン

構文

ASIN( expression )
Copy

引数

expression: 数値の float 式。式は$$[-1,1]$$内にあります。

返されるタイプ

$$-\frac{\pi}{2}$$と$$\frac{\pi}{2}$$の間の数値float式。パラメーターで送られた数値式が$$[-1, 1]$$に含まれない場合、データベースエンジンはエラーを投げます。

クエリ

SELECT ASIN(0.5);
Copy

結果

ASIN(0.5)         |
------------------|
0.5235987755982989|
Copy

JS の ASIN

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定した数値のアークサインを返す関数\ (JavaScript ASIN 関数ドキュメント)。

サンプルソースパターン

構文

 Math.asin( expression )
Copy
引数

expression: 数値式。式は$$[-1,1]$$内にあります。

返されるタイプ

$$-\frac{\pi}{2}$$と$$\frac{\pi}{2}$$の間の数値式。パラメーターで送られた数値式がアークコサイン$$[-1, 1]$$の領域外の場合、関数は NaN を返します。

クエリ

 CREATE OR REPLACE FUNCTION compute_asin(a float)
  RETURNS float
  LANGUAGE JAVASCRIPT
AS
$$
  return Math.asin(A);
$$
;
SELECT COMPUTE_ASIN(0.5);
Copy
結果
COMPUTE_ASIN(1)   |
------------------|
      0.5235987756|
Copy

COS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターを通して送られた角度のコサインを返す関数(ラジアンで測定する必要があります) (Transact-SQL の COS)。

コサインは次のように定義されます:\ $$y = cos(x)$$\ Where:\ - Range: $$-1\leqslant y \leqslant 1$$\ - Domain: $$\mathbb{R}$$

サンプルソースパターン

構文

COS( expression )
Copy

引数

expression: 数値の float 式。式は$$\mathbb{R}$$内にあります。

返されるタイプ

$$[-1, 1]$$の数値float式。

クエリ

SELECT COS(PI())
Copy

結果

COS(PI())|
---------|
     -1.0|
Copy

JS の COS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

角度のコサインをラジアン単位で返す静的関数\ (JavaScript COS 関数ドキュメント)。

サンプルソースパターン

構文

 Math.cos( expression )
Copy
引数

expression: 数値式。

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

CREATE OR REPLACE FUNCTION compute_cos(angle float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  return Math.cos(ANGLE); 
$$
;
SELECT COMPUTE_COS(PI());
Copy
結果
COMPUTE_COS(PI())|
-----------------|
               -1|
Copy

COT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターを通して送られたラジアン単位の角度のコタンジェントを返します(Transact-SQL の COT)。

コサインは次のように定義されます:\ $$cot(x) = \frac{cos(x)}{sin(x)}$$または$$cot(x) = \frac{1}{tan(x)}$$\ コサインを計算するには、パラメーターがサイン関数と コサイン関数の制約に準拠する必要があります。

サンプルソースパターン

構文

COT( expression )
Copy

引数

expression: 数値の float 式。式は$$\mathbb{R}-{sin(expression)=0 \wedge tan(expression) =0}$$内にあります。

返されるタイプ

$$\mathbb{R}$$の数値float式。

クエリ

SELECT COT(1)
Copy

結果

COT(1)            |
------------------|
0.6420926159343306|
Copy

JS の COT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

残念ながら、 JavaScript のオブジェクト Math は、与えられた角度のコタンジェントを計算する方法を提供していません。\ これは、次の式を使用して計算できます: $$cot(x) = \frac{cos(x)}{sin(x)}$$

サンプルソースパターン

実装例

 function cot(angle){
    return Math.cos(angle)/Math.sin(angle);
}
Copy
引数

angle: ラジアン単位の数値式。

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

CREATE OR REPLACE FUNCTION compute_cot(angle float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  function cot(angle){
    return Math.cos(angle)/Math.sin(angle);
  }
  return cot(ANGLE);
    
$$
;
SELECT COMPUTE_COT(1);
Copy
結果
COMPUTE_COT(1);   |
------------------|
0.6420926159343308|
Copy

RADIANS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

度をラジアンに変換します。\ (Transact-SQL の RADIANS)。

サンプルソースパターン

構文

RADIANS( expression )
Copy

引数

expression: 度単位での数値式。

返されるタイプ

パラメーターを通してラジアン単位の数値式として送られる同じデータ型。

クエリ

SELECT RADIANS(180.0)
Copy

結果

RADIANS(180)

3.141592653589793116

注釈

この関数のパラメーターをfloatにキャストします。そうしないと、上記のステートメントは PI の値の代わりに3を返します。

JS の RADIANS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

JavaScript は、度を特定の角度のラジアンに変換する方法を提供していません。\ これは、次の式を使用して計算できます。$$Radians = \frac{\pi}{180^{\circ}} \cdot angle$$

サンプルソースパターン

実装例

 function radians(angle){
    return (Math.PI/180) * angle;
}
Copy
引数

angle: 度単位でのFloat式。

返されるタイプ

パラメーターを通してラジアン単位の数値式として送られる同じデータ型。

クエリ

CREATE OR REPLACE FUNCTION RADIANS(angle float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
    function radians(angle){
      return (Math.PI/180) * angle;
    }
    return radians(ANGLE);
$$
;
SELECT RADIANS(180);
Copy
結果

RADIANS(180)

3.141592654

PI

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

PI の定数値を返します\ (Transact-SQL の PI)。

サンプルソースパターン

構文

PI( )
Copy

引数

このメソッドはパラメーターを受け取りません。

返されるタイプ

Float。

クエリ

CREATE PROCEDURE CIRCUMFERENCE @radius float
AS 
    SELECT 2 * PI() * @radius;
GO:

EXEC CIRCUMFERENCE @radius = 2;
Copy

結果

CIRCUMFERENCE @radius = 2 |
--------------------------|
          12.5663706143592|
Copy

JS の PI

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

PI 数(約3.141592...)を表す定数\ (JavaScript PI ドキュメント)。

サンプルソースパターン

構文

 Math.PI
Copy

クエリ

CREATE OR REPLACE FUNCTION circumference(radius float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  function circumference(r){
    return 2 * Math.PI * r;
  }
  return circumference(RADIUS); 
$$
;
SELECT CIRCUMFERENCE(2);
Copy
結果
  CIRCUMFERENCE(2)|
------------------|
12.566370614359172|
Copy

DEGREES

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターを通して送られたラジアン単位の角度を度数に変換します(Transact-SQL の DEGREES)。

サンプルソースパターン

構文

DEGREES( expression )
Copy

引数

expression: ラジアン単位の数値 float 式。

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

SELECT DEGREES(PI())
Copy

結果

DEGREES(PI())|
-------------|
        180.0|
Copy

JS の DEGREES

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

JavaScript は、ラジアンを特定の角度の度数に変換する方法を提供していません。これは、次の式を使用して計算できます。$$Degrees = \frac{180^{\circ}}{\pi} \cdot angle$$

サンプルソースパターン

実装例

 function degress(angle){
    return (180/Math.PI) * angle;
}
Copy
引数

angle: ラジアン単位の数値式。

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

CREATE OR REPLACE FUNCTION compute_degrees(angle float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  function degrees(angle){
    return (180/Math.PI) * angle;
  }
  return degrees(ANGLE);
    
$$
;
SELECT COMPUTE_DEGREES(PI());
Copy
結果
COMPUTE_DEGREES(PI())|
---------------------|
                180.0|
Copy

LOG

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

数値の自然対数を返します\ (Transact-SQL の LOG)。

サンプルソースパターン

構文

LOG( expression [, base ] )
Copy

引数

expression: 数値式。

base (オプション): 数値の対数を計算するためのベース。デフォルトはオイラーです。

返されるタイプ

Float。

クエリ

SELECT LOG(8, 2)
Copy

結果

LOG(8, 2)  |
-----------|
          3|
Copy

JS の LOG

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

オイラー数をベースとして対数を返します。(JavaScript LOG 関数ドキュメント)。

警告

残念ながら、 JavaScript はパラメーターを通して対数のベースを受け取るメソッドを提供していませんが、これはベースを引数で割ることで解決できます。

サンプルソースパターン

構文

 Math.log( expression )
Copy
引数

expression: 数値式。正の値である必要があります。それ以外の場合は NaN を返します。\

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

 CREATE OR REPLACE FUNCTION base_log(base float, exp float)
  RETURNS float
  LANGUAGE JAVASCRIPT
AS
$$
  function getBaseLog(x, y){
    return Math.log(y)/Math.log(x);
  }
  return getBaseLog(EXP, BASE)
$$
;
SELECT BASE_LOG(2, 8);
Copy
結果
BASE_LOG(2, 8)|
--------------|
             3|
Copy

ATAN

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送られた数値のラジアン単位のアークタンジェントを返す関数(Transact-SQL の ATAN)。

アークタンジェントはタンジェントの逆関数であり、次の定義にまとめられます:\ $$y = arctan^{-1} \Leftrightarrow x = tan(x)$$

For $$y = tan^{-1}(x)$$:\ - Range: $$-\frac{\pi}{2}\leqslant y \leqslant \frac{\pi}{2}$$ or $$-90^{\circ}\leqslant y \leqslant 90^{\circ}$$\ - Domain: $$\mathbb{R}$$

サンプルソースパターン

構文

ATAN( expression )
Copy

引数

expression: 数値 float 式、またはfloatに変換可能な数値型。

返されるタイプ

$$-\frac{\pi}{2}$$と$$\frac{\pi}{2}$$の間の数値float式。

クエリ

SELECT ATAN(-30);
Copy

結果

ATAN(-30)          |
-------------------|
-1.5374753309166493|
Copy

JS の ATAN

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定した数値のアークタンジェントを返す関数\ (JavaScript ATAN 関数ドキュメント)。

サンプルソースパターン

構文

 Math.atan( expression )
Copy
引数

expression: 数値式。

返されるタイプ

$$-\frac{\pi}{2}$$と$$\frac{\pi}{2}$$の間の数値式。

クエリ

 CREATE OR REPLACE FUNCTION compute_atan(a float)
  RETURNS float
  LANGUAGE JAVASCRIPT
AS
$$
  return Math.atan(A);
$$
;
SELECT COMPUTE_ATAN(-30);
Copy
結果
COMPUTE_ATAN(-30)|
-----------------|
     -1.537475331|
Copy

ATN2

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

パラメーターとして送られた2つの座標のラジアン単位のアークタンジェントを返す関数(Transact-SQL の ATN2)。

For $$z = tan^{-1}(x, y)$$:
- Range: $$-\pi\leqslant z \leqslant \pi$$ or $$-180^{\circ}\leqslant z \leqslant 180^{\circ}$$
- Domain: $$\mathbb{R}$$

サンプルソースパターン

構文

ATN2( expression_1, expression_2 )
Copy

引数

expression1 および expression2: 数値式。

返されるタイプ

$$-\pi$$と$$\pi$$の間の数値式。

クエリ

SELECT ATN2(7.5, 2);
Copy

結果

ATN2(7.5, 2)      |
------------------|
1.3101939350475555|
Copy

JS の ATAN2

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

2つのパラメーターのアークタンジェントを返す関数\ (JavaScript ATAN2 関数ドキュメント)。

サンプルソースパターン

構文

 Math.atan2( expression_1, expression_2 )
Copy
引数

expression_1 および expression_2: 数値式。

返されるタイプ

$$-\pi$$と$$\pi$$の間の数値式。

クエリ

CREATE OR REPLACE FUNCTION compute_atan2(x float, y float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  return Math.atan2(X, Y);
$$
;
SELECT COMPUTE_ATAN2(7.5, 2);
Copy
結果
ATAN2(7.5, 3)     |
------------------|
       1.310193935|
Copy

LOG10

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

数値のベースを10とする対数を返します\ (Transact-SQL の LOG10)。

サンプルソースパターン

構文

LOG10( expression )
Copy

引数

expression: 数値式。正でなければなりません。

返されるタイプ

Float。

クエリ

SELECT LOG10(5)
Copy

結果

LOG10(5)         |
-----------------|
0.698970004336019|
Copy

JS の LOG10

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

数値のベースを10とする対数を返します\ (JavaScript LOG10 関数ドキュメント)。

サンプルソースパターン

構文

 Math.log10( expression )
Copy
引数

expression: 数値式。正の値である必要があります。それ以外の場合は NaN を返します。\

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

 CREATE OR REPLACE FUNCTION compute_log10(argument float)
  RETURNS float
  LANGUAGE JAVASCRIPT
AS
$$
    return Math.log10(ARGUMENT);
$$
;
SELECT COMPUTE_LOG10(7.5);
Copy
結果
COMPUTE_LOG10(5)|
----------------|
    0.6989700043|
Copy

EXP

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

オイラーの指数値を返します(Transact-SQL の EXP)。

サンプルソースパターン

構文

EXP( expression )
Copy

引数

expression: 数値式。

返されるタイプ

パラメーターを通して数値式として送られる同じデータ型。

クエリ

SELECT EXP(LOG(20)), LOG(EXP(20))  
GO 
Copy

結果

EXP(LOG(20))   |LOG(EXP(20))    |
---------------|----------------|
           20.0|            20.0|
Copy

JS の EXP

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

オイラー数を表す定数(約2.718...)\ (JavaScript オイラー数のドキュメント)。\ JavaScript では、オイラーの指数のみをサポートするTransact-SQL の代わりに、この定数を使用してさまざまな操作を行うことができます。

サンプルソースパターン

構文

 Math.E
Copy

クエリ

CREATE OR REPLACE FUNCTION compute_exp(x float)
RETURNS float
LANGUAGE JAVASCRIPT
AS
$$
  return Math.E**X;
$$
;
SELECT COMPUTE_EXP(LN(20)), LN(COMPUTE_EXP(20));
Copy
結果
COMPUTE_EXP(LOG(20))|LOG(COMPUTE_EXP(20))|
--------------------|--------------------|
                20.0|                20.0|
Copy

変換関数

このセクションでは、Transact-SQL とSnowflake SQL コードでの日付と時刻の関数の相当する機能を説明します。

CONVERT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

あるデータ型の式を別のデータ型に変換します。(Transact-SQL の CONVERT)。

サンプルソースパターン

構文

SQL Server
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

CAST( <source_expr> AS <target_data_type> )
Copy

SQL Server

SELECT CONVERT(INT, '1998') as MyDate
Copy
結果

MyDate

1998

Snowflake SQL
SELECT
CAST('1998' AS INT) as MyDate;
Copy
結果

MYDATE

1998

日付型をvarcharにキャスト
SQL Server
SELECT CONVERT(varchar, getdate(), 1) AS RESULT;
Copy
結果

RESULT

12/08/22

Swowflake SQL
SELECT
TO_VARCHAR(CURRENT_TIMESTAMP() :: TIMESTAMP, 'mm/dd/yy') AS RESULT;
Copy
結果

RESULT

12/08/22

日付型をサイズ付きvarcharにキャスト
SQL Server
SELECT CONVERT(varchar(2), getdate(), 1) AS RESULT;
Copy
結果

RESULT

07

Snowflake SQL
SELECT
LEFT(TO_VARCHAR(CURRENT_TIMESTAMP() :: TIMESTAMP, 'mm/dd/yy'), 2) AS RESULT;
Copy
結果

RESULT

07

サポートされている日付キャストの形式は以下のとおりです。

日付形式

コード

形式

1

mm/dd/yy

2

yy.mm.dd

3

dd/mm/yy

4

dd.mm.yy

5

dd-mm-yy

6

dd-Mon-yy

7

Mon dd, yy

10

mm-dd-yy

11

yy/mm/dd

12

yymmdd

23

yyyy-mm-dd

101

mm/dd/yyyy

102

yyyy.mm.dd

103

dd/mm/yyyy

104

dd.mm.yyyy

105

dd-mm-yyyy

106

dd Mon yyyy

107

Mon dd, yyyy

110

mm-dd-yyyy

111

yyyy/mm/dd

112

yyyymmdd

時刻形式

コード

形式

8

hh:mm:ss

14

hh:mm:ss:ff3

24

hh:mm:ss

108

hh:mm:ss

114

hh:mm:ss:ff3

日付と時刻の形式

0

Mon dd yyyy hh:mm AM/PM

9

Mon dd yyyy hh:mm:ss:ff3 AM/PM

13

dd Mon yyyy hh:mm:ss:ff3 AM/PM

20

yyyy-mm-dd hh:mm:ss

21

yyyy-mm-dd hh:mm:ss:ff3

22

mm/dd/yy hh:mm:ss AM/PM

25

yyyy-mm-dd hh:mm:ss:ff3

100

Mon dd yyyy hh:mm AM/PM

109

Mon dd yyyy hh:mm:ss:ff3 AM/PM

113

dd Mon yyyy hh:mm:ss:ff3

120

yyyy-mm-dd hh:mm:ss

121

yyyy-mm-dd hh:mm:ss:ff3

126

yyyy-mm-dd T hh:mm:ss:ff3

127

yyyy-mm-dd T hh:mm:ss:ff3

イスラム暦の日付

コード

形式

130

dd mmm yyyy hh:mi:ss:ff3 AM/PM

131

dd mmm yyyy hh:mi:ss:ff3 AM/PM

現在のコードとパターンが一致しない場合は、 yyyy-mm-dd hh:mm:ss の形式になります。

TRY_CONVERT

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

キャストが成功した場合は、指定されたデータ型にキャストされた値を返します。それ以外の場合はnullを返します。

(SQL Server言語リファレンス TRY_CONVERT)

構文

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )  
Copy

ソースパターン

基本的な変換

この関数を変換するためには、まず TRY_CONVERT のパラメーターを確認する必要があります。

TRY_CONVERT( INT, 'test')
Copy

キャストする必要がある式が文字列の場合、Snowflakeの関数である TRY_CAST に変換されます。

TRY_CAST( 'test' AS INT)
Copy

TRY_CAST

TRY_CAST は TRY_CONVERT と同じ変換を共有します。

SQL Server
SELECT TRY_CAST('12345' AS NUMERIC) NUMERIC_RESULT,
 TRY_CAST('123.45' AS DECIMAL(20,2)) DECIMAL_RESULT,
 TRY_CAST('123' AS INT) INT_RESULT,
 TRY_CAST('123.02' AS FLOAT) FLOAT_RESULT,
 TRY_CAST('123.02' AS DOUBLE PRECISION) DOUBLE_PRECISION_RESULT,

 TRY_CAST('2017-01-01 12:00:00' AS DATE) DATE_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS DATETIME) DATETIME_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS SMALLDATETIME) SMALLDATETIME_RESULT,
 TRY_CAST('12:00:00' AS TIME) TIME_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS TIMESTAMP) TIMESTAMP_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS DATETIMEOFFSET) DATETIMEOFFSET_RESULT,

 TRY_CAST(1234 AS VARCHAR) VARCHAR_RESULT,
 TRY_CAST(1 AS CHAR) CHAR_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS SQL_VARIANT) SQL_VARIANT_RESULT,
 TRY_CAST('LINESTRING(-122.360 47.656, -122.343 47.656 )' AS GEOGRAPHY) GEOGRAPHY_RESULT;
Copy

結果は TRY_CONVERT の例と同じです。

Snowflake
SELECT
 TRY_CAST('12345' AS NUMERIC(38, 18)) NUMERIC_RESULT,
 TRY_CAST('123.45' AS DECIMAL(20,2)) DECIMAL_RESULT,
 TRY_CAST('123' AS INT) INT_RESULT,
 TRY_CAST('123.02' AS FLOAT) FLOAT_RESULT,
 TRY_CAST('123.02' AS DOUBLE PRECISION) DOUBLE_PRECISION_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS DATE) DATE_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS TIMESTAMP_NTZ(3)) DATETIME_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS TIMESTAMP_NTZ(0)) SMALLDATETIME_RESULT,
 TRY_CAST('12:00:00' AS TIME(7)) TIME_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS BINARY(8)) TIMESTAMP_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS TIMESTAMP_TZ(7)) DATETIMEOFFSET_RESULT,
 TO_VARCHAR(1234) VARCHAR_RESULT,
 TO_CHAR(1) CHAR_RESULT,
 TRY_CAST('2017-01-01 12:00:00' AS VARIANT) SQL_VARIANT_RESULT,
 TRY_CAST('LINESTRING(-122.360 47.656, -122.343 47.656 )' AS GEOGRAPHY) GEOGRAPHY_RESULT;
Copy

既知の問題

データ型がVarcharやCharの場合は、異なる変換が行われます。

TRY_CONVERT(VARCHAR, 1234);
TRY_CONVERT(CHAR, 1);
Copy

Snowflakeで TRY_CAST を VARCHAR や CHAR と一緒に使うとエラーになるので、次のように変換します。

TO_VARCHAR(1234);
TO_CHAR(1);
Copy

SQL_VARIANT と GEOGRAPHY のデータ型も同様です。

TRY_CONVERT(SQL_VARIANT, '2017-01-01 12:00:00');
TRY_CONVERT(GEOGRAPHY, 'LINESTRING(-122.360 47.656, -122.343 47.656 )');
Copy

以下に変換されます

TO_VARIANT('2017-01-01 12:00:00');
TO_GEOGRAPHY('LINESTRING(-122.360 47.656, -122.343 47.656 )');
Copy

式が文字列でない場合、Snowflakeの TRY_CAST は文字列式でのみ機能するため、失敗する可能性が非常に高くなります。

この場合、別の変換が行われます

TRY_CAST(14.85 AS INT)
Copy

以下に変換されます

CAST(14.85 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/
Copy

さて、このような変換では、関数で何を行うかによって問題が発生する可能性があります。SqlServer の TRY୧_CONVERT は、変換できなかった場合はnullを返します。

これは、次のようなロジックを実行するために使用できます

SELECT 
    CASE
        WHEN TRY_CONVERT( INT, 'Expression') IS NULL
        THEN 'FAILED'
        ELSE 'SUCCEDDED'
    END;
Copy

TRY_CONVERT を含むこのタイプの条件は TRY_CAST で使用できますが、それを TO_VARCHAR、 TOCHAR、または CAST に変換するとどうなるでしょうか?これらの関数で変換に失敗した場合、nullを返す代わりにエラーを発生させます。

このサンプルでは、データ型が異なる TRY_CONVERT が複数あります

SQL Server
SELECT TRY_CONVERT(NUMERIC, '12345') NUMERIC_RESULT,
 TRY_CONVERT(DECIMAL(20,2), '123.45') DECIMAL_RESULT,
 TRY_CONVERT(INT, '123') INT_RESULT,
 TRY_CONVERT(FLOAT, '123.02') FLOAT_RESULT,
 TRY_CONVERT(DOUBLE PRECISION, '123.02') DOUBLE_PRECISION_RESULT,

 TRY_CONVERT(DATE, '2017-01-01 12:00:00') DATE_RESULT,
 TRY_CONVERT(DATETIME, '2017-01-01 12:00:00') DATETIME_RESULT,
 TRY_CONVERT(SMALLDATETIME, '2017-01-01 12:00:00') SMALLDATETIME_RESULT,
 TRY_CONVERT(TIME, '12:00:00') TIME_RESULT,
 TRY_CONVERT(TIMESTAMP, '2017-01-01 12:00:00') TIMESTAMP_RESULT,
 TRY_CONVERT(DATETIMEOFFSET, '2017-01-01 12:00:00') DATETIMEOFFSET_RESULT,

 TRY_CONVERT(VARCHAR, 1234) VARCHAR_RESULT,
 TRY_CONVERT(CHAR, 1) CHAR_RESULT,
 TRY_CONVERT(SQL_VARIANT, '2017-01-01 12:00:00') SQL_VARIANT_RESULT,
 TRY_CONVERT(GEOGRAPHY, 'LINESTRING(-122.360 47.656, -122.343 47.656 )') GEOGRAPHY_RESULT;
Copy

この選択を移行すると、次のような結果が得られます

Snowflake
SELECT
 CAST('12345' AS NUMERIC(38, 18)) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ NUMERIC_RESULT,
 CAST('123.45' AS DECIMAL(20,2)) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ DECIMAL_RESULT,
 CAST('123' AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ INT_RESULT,
 CAST('123.02' AS FLOAT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ FLOAT_RESULT,
 CAST('123.02' AS DOUBLE PRECISION) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ DOUBLE_PRECISION_RESULT,
 CAST('2017-01-01 12:00:00' AS DATE) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ DATE_RESULT,
 CAST('2017-01-01 12:00:00' AS TIMESTAMP_NTZ(3)) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ DATETIME_RESULT,
 CAST('2017-01-01 12:00:00' AS TIMESTAMP_NTZ(0)) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ SMALLDATETIME_RESULT,
 CAST('12:00:00' AS TIME(7)) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ TIME_RESULT,
 CAST('2017-01-01 12:00:00' AS BINARY(8)) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ TIMESTAMP_RESULT,
 CAST('2017-01-01 12:00:00' AS TIMESTAMP_TZ(7)) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/ DATETIMEOFFSET_RESULT,
 TO_VARCHAR(1234) VARCHAR_RESULT,
 TO_CHAR(1) CHAR_RESULT,
 TO_VARIANT('2017-01-01 12:00:00') SQL_VARIANT_RESULT,
 TO_GEOGRAPHY('LINESTRING(-122.360 47.656, -122.343 47.656 )') GEOGRAPHY_RESULT;
Copy

それぞれを実行し、結果を比較してみましょう。

エイリアス

SqlServer 結果

Snowflake結果

NUMERIC_RESULT

12345

12345

DECIMAL_RESULT

123.45

123.45

INT_RESULT

123

123

FLOAT_RESULT

123.02

123.02

DOUBLE_PRECISION_RESULT

123.02

123.02

DATE_RESULT

2017-01-01

2017-01-01

DATETIME_RESULT

2017-01-01 12:00:00.000

2017-01-01 12:00:00.000

SMALLDATETIME_RESULT

2017-01-01 12:00:00

2017-01-01 12:00:00.000

TIME_RESULT

12:00:00.0000000

12:00:00

TIMESTAMP_RESULT

0x323031372D30312D

2017-01-01 12:00:00.000

DATETIMEOFFSET_RESULT

2017-01-01 12:00:00.0000000 +00:00

2017-01-01 12:00:00.000 -0800

VARCHAR_RESULT

1234

1234

CHAR_RESULT

1

1

SQL_VARIANT_RESULT

2017-01-01 12:00:00

"2017-01-01 12:00:00"

GEOGRAPHY_RESULT

0xE610000001148716D9CEF7D34740D7A3703D0A975EC08716D9CEF7D34740CBA145B6F3955EC0

{ "coordinates": [ [ -122.36, 47.656 ], [ -122.343, 47.656 ] ], "type": "LineString" }

関連 EWIs

  1. SSC-FDM-TS0005: TRY_CONVERT/TRY_CAST を TRY_CAST に変換できませんでした。

日付と時刻の関数

このセクションでは、Transact-SQL とSnowflake SQL および JavaScript コードでの日付と時刻の関数の相当する機能を説明します。

AT TIME ZONE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

inputdate をターゲットタイムゾーンの対応する datetimeoffset 値に変換します。(Transact-SQL の AT TIME ZONE)。

サンプルソースパターン

構文

SQL Server
inputdate AT TIME ZONE timezone
Copy
Snowflake SQL

Snowflake SQL ドキュメント

CONVERT_TIMEZONE( <source_tz> , <target_tz> , <source_timestamp_ntz> )

CONVERT_TIMEZONE( <target_tz> , <source_timestamp> )
Copy

SQL Server

SELECT CAST('2022-11-24 11:00:45.2000000 +00:00' as datetimeoffset) at time zone 'Alaskan Standard Time';
Copy

結果:

                          DATE|
------------------------------|
2022-11-24 02:00:45.200 -09:00|
Copy
Snowflake SQL
SELECT
CONVERT_TIMEZONE('America/Anchorage', CAST('2022-11-24 11:00:45.2000000 +00:00' as TIMESTAMP_TZ(7)));
Copy

結果:

                          DATE|
------------------------------|
2022-11-24 02:00:45.200 -09:00|
Copy
SQL Server
SELECT current_timestamp at time zone 'Central America Standard Time';
Copy

結果:

                          DATE|
------------------------------|
2022-10-10 10:55:50.090 -06:00|
Copy
Snowflake SQL
SELECT
CONVERT_TIMEZONE('America/Costa_Rica', CURRENT_TIMESTAMP() /*** SSC-FDM-TS0024 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/);
Copy

結果:

                          DATE|
------------------------------|
2022-10-10 10:55:50.090 -06:00|
Copy

既知の問題

  1. Snowflakeは、 SQL Serverがサポートしているすべてのタイムゾーンをサポートしていません。サポートされているタイムゾーンはこちらの リンク からご確認いただけます。

SQL Server

SELECT current_timestamp at time zone 'Turks And Caicos Standard Time';
Copy

結果:

                          DATE|
------------------------------|
2022-12-14 20:04:18.317 -05:00| 
Copy
Snowflake SQL
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0063 - TIME ZONE NOT SUPPORTED IN SNOWFLAKE ***/!!!
CURRENT_TIMESTAMP() at time zone 'Turks And Caicos Standard Time';
Copy

関連 EWIs

  1. SSC-FDM-TS0024:At Time Zoneステートメントの CURRENT_TIMESTAMP は、場合によっては異なる動作をすることがあります。

  2. SSC-EWI-TS0063:Snowflakeではタイムゾーンがサポートされていません。

DATEADD

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、指定された日付の指定された日付部分を表す整数を返します。(Transact-SQL の DATEPART)。

サンプルソースパターン

構文

SQL Server
DATEADD (datepart , number , date )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
Copy

SQL Server

SELECT DATEADD(year,123, '20060731') as ADDDATE;  
Copy

結果:

                 ADDDATE|
------------------------|
 2129-07-31 00:00:00.000|
Copy
Snowflake SQL
SELECT
DATEADD(year, 123, '20060731') as ADDDATE;
Copy

結果:

                 ADDDATE|
------------------------|
 2129-07-31 00:00:00.000|
Copy

DATEDIFF

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、指定された開始日と終了日の間に横切った指定された日付部分の境界の数を(符号付き整数値として)返します。(Transact-SQL の DATEDIFF)。

サンプルソースパターン

構文

SQL Server
DATEDIFF ( datepart , startdate , enddate )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

DATEDIFF( <date_or_time_part>, <date_or_time_expr1>, <date_or_time_expr2> )
Copy

SQL Server

SELECT DATEDIFF(year,'2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
Copy

結果:

DIFF

1

Snowflake SQL
SELECT DATEDIFF(year,'2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
Copy

結果:

DIFF

1

DATEFROMPARTS

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、指定された年、月、日の値にマッピングされた 日付 の値を返します。(Transact-SQL の DATEFROMPARTS)。

サンプルソースパターン

構文

SQL Server
DATEFROMPARTS ( year, month, day )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

DATE_FROM_PARTS( <year>, <month>, <day> )
Copy

SQL Server

SELECT DATEFROMPARTS ( 2010, 12, 31 ) AS RESULT;  
Copy

結果:

RESULT

2022-12-12

Snowflake SQL
SELECT DATE_FROM_PARTS ( 2010, 12, 31 ) AS RESULT;
Copy

結果:

RESULT

2022-12-12

DATENAME

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、指定された日付の指定された日付部分を表す文字列を返します。(Transact-SQL の DATENAME)。

サンプルソースパターン

構文

SQL Server
DATENAME ( datepart , date )  
Copy
Snowflake SQL

注釈

この変換は、入力に応じていくつかの関数を使用します

DATE_PART( <date_or_time_part> , <date_or_time_expr> )
MONTHNAME( <date_or_timestamp_expr> )
DAYNAME( <date_or_timestamp_expr> )
Copy

SQL Server

SELECT DATENAME(month, getdate()) AS DATE1,
DATENAME(day, getdate()) AS DATE2,
DATENAME(dw, GETDATE()) AS DATE3;
Copy

結果:

DATE1

DATE2

DATE3

May

3

Tuesday

Snowflake SQL
SELECT
MONTHNAME_UDF(CURRENT_TIMESTAMP() :: TIMESTAMP) AS DATE1,
DAYNAME_UDF(CURRENT_TIMESTAMP() :: TIMESTAMP) AS DATE2,
DAYNAME(CURRENT_TIMESTAMP() :: TIMESTAMP) AS DATE3;
Copy

結果:

DATE1

DATE2

DATE3

May

Tue

Tue

DATEPART

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、指定された日付の指定された日付部分を表す整数を返します。(Transact-SQL の DATEPART)。

サンプルソースパターン

構文

SQL Server
DATEPART ( datepart , date )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

DATE_PART( <date_or_time_part> , <date_or_time_expr> )
Copy

SQL Server

SELECT DATEPART(YEAR, '10-10-2022') as YEAR
Copy

結果:

YEAR

2022

Snowflake SQL
SELECT
DATE_PART(YEAR, '10-10-2022' :: TIMESTAMP) as YEAR;
Copy

結果:

YEAR

2022

DAY

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、指定された日付の日(月内の日)を表す整数を返します。(Transact-SQL の DAY)。

サンプルソースパターン

構文

SQL Server
DAY ( date )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

DAY( <date_or_timestamp_expr> )
Copy

SQL Server

SELECT DAY('10-10-2022') AS DAY
Copy

結果:

DAY

10

Snowflake SQL
SELECT DAY('10-10-2022' :: TIMESTAMP) AS DAY;
Copy

結果:

DAY

10

EOMONTH

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

この関数は、指定した日付を含む月の最終日を、オプションのオフセットを付けて返します。(Transact-SQL の EOMONTH)。

サンプルソースパターン

構文

SQL Server
EOMONTH ( start_date [, month_to_add ] )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

LAST_DAY( <date_or_time_expr> [ , <date_part> ] )
Copy

SQL Server

SELECT EOMONTH (GETDATE()) AS Result; 
Copy

結果:

RESULT

2022-05-31

Snowflake SQL
SELECT
LAST_DAY(DATEADD('month', 0, CURRENT_TIMESTAMP() :: TIMESTAMP)) AS Result;
Copy

結果:

RESULT

2022-05-31

GETDATE

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

現在のデータベースシステムのタイムスタンプを、データベースタイムゾーンオフセットを除いた 日付時刻 値として返します。(Transact-SQL の GETDATE)。

サンプルソースパターン

構文

SQL Server
GETDATE() 
Copy
Snowflake SQL

Snowflake SQL ドキュメント

CURRENT_TIMESTAMP( [ <fract_sec_precision> ] )
Copy

SQL Server

SELECT GETDATE() AS DATE;
Copy

結果:

DATE

2022-05-06 09:54:42.757

Snowflake SQL
SELECT CURRENT_TIMESTAMP() :: TIMESTAMP AS DATE;
Copy

結果:

DATE

2022-05-06 08:55:05.422

MONTH

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された 日付 の月を表す整数を返します。(Transact-SQL の MONTH)。

サンプルソースパターン

構文

SQL Server
MONTH( date )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

MONTH ( <date_or_timestamp_expr> )
Copy

SQL Server

SELECT MONTH('10-10-2022') AS MONTH
Copy

結果:

MONTH

10

Snowflake SQL
SELECT MONTH('10-10-2022' :: TIMESTAMP) AS MONTH;
Copy

結果:

MONTH

10

SWITCHOFFSET

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

SWITCHOFFSET は、指定されたタイムスタンプ値を特定のタイムゾーンオフセットに調整します。これは数値によって行われます。詳細情報は SWITCHOFFSET (Transact-SQL)をご覧ください。

サンプルソースパターン

構文

UDF ヘルパーは、 SQLServer の SWITCHOFFSET 関数と同じ構文を共有し、機能的な等価性を達成します。

SQLServer
 SWITCHOFFSET ( datetimeoffset_expression, timezoneoffset_expression )   
Copy
Snowflake SQL
 SWITCHOFFSET_UDF ( timestamp_tz_expression, timezoneoffset_expression )   
Copy

SQLServer
SELECT
  '1998-09-20 7:45:50.71345 +02:00' as fr_time,
  SWITCHOFFSET('1998-09-20 7:45:50.71345 +02:00', '-06:00') as cr_time;  
Copy

結果:

fr_time

cr_time

1998-09-20 7:45:50.71345 +02:00

1998-09-19 23:45:50.7134500 -06:00

Snowflake SQL
SELECT
  '1998-09-20 7:45:50.71345 +02:00' as fr_time,
  PUBLIC.SWITCHOFFSET_UDF('1998-09-20 7:45:50.71345 +02:00', '-06:00') as cr_time;
Copy

結果:

fr_time

cr_time

1998-09-20 7:45:50.71345 +02:00

1998-09-19 23:45:50.7134500 -06:00

SYSDATETIME

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

SQL Serverのインスタンスが実行されているコンピューターの日付と時刻を含むdatetime2(7)値を返します。(Transact-SQL の SYSDATETIME)。

サンプルソースパターン

構文

SQL Server
SYSDATETIME ( )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

LOCALTIME()
Copy

SQL Server

SELECT SYSDATETIME ( ) AS SYSTEM_DATETIME;
Copy

結果:

SYSTEM_DATETIME

2022-05-06 12:08:05.501

Snowflake SQL
SELECT LOCALTIME ( ) AS SYSTEM_DATETIME;
Copy

結果:

SYSTEM_DATETIME

211:09:14

SYSUTCDATETIME

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

SQL Serverのインスタンスが実行されているコンピューターの日付と時刻を含むdatetime2(7)値を返します。(Transact-SQL の SYSUTCDATETIME)。

サンプルソースパターン

構文

SQL Server
SYSUTCDATETIME ( )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

SYSDATE()
Copy

SQL Server

SELECT SYSUTCDATETIME() as SYS_UTC_DATETIME;
Copy

結果:

SYSTEM_UTC_DATETIME

2023-02-02 20:59:28.0926502

Snowflake SQL
SELECT
SYSDATE() as SYS_UTC_DATETIME;
Copy

結果:

SYSTEM_UTC_DATETIME

2023-02-02 21:02:05.557

YEAR

Applies to
  • SQL Server

  • Azure Synapse Analytics

説明

指定された 日付 の年を表す整数を返します。(Transact-SQL の YEAR)。

サンプルソースパターン

構文

SQL Server
YEAR( date )  
Copy
Snowflake SQL

Snowflake SQL ドキュメント

YEAR ( <date_or_timestamp_expr> )
Copy

SQL Server

SELECT YEAR('10-10-2022') AS YEAR
Copy

結果:

YEAR

2022

Snowflake SQL
SELECT YEAR('10-10-2022' :: TIMESTAMP) AS YEAR;
Copy

結果:

YEAR

2022