SQL Server 文字列を日付型に変換する: CONVERT, CAST

SQL Server 文字列を日付型に変換する: CONVERT, CAST

SQL Serverで文字列を日付型に変換するには CONVERT, CAST を使います。
逆に日付型から文字列にする場合にも CONVERT を使います。
SQL Server 日付の年月日だけを取り出す: CONVERT

CONVERT や CAST は、あるデータ型の式を別のデータ型の式に変換できる非常に便利な関数です。

CAST

CASTを使った変換です。

select 'CAST(''02/27/2018'' AS datetime)' as 式, CAST('02/27/2018' AS datetime) as 結果
union all
select 'CAST(''180227'' AS datetime)', CAST('180227' AS datetime)
union all
select 'CAST(''18/02/27'' AS datetime)', CAST('18/02/27' AS datetime)
union all
select 'CAST(''18/02/27 07:08:09'' AS datetime)', CAST('18/02/27 07:08:09' AS datetime)
union all
select 'CAST(''20180227'' AS datetime)', CAST('20180227' AS datetime)
union all
select 'CAST(''2018/02/27'' AS datetime)', CAST('2018/02/27' AS datetime)
union all
select 'CAST(''2018/02/27 07:08:09'' AS datetime)', CAST('2018/02/27 07:08:09' AS datetime)

結果は、以下の通りです。

SQL Server CASTを使った文字列⇒日付型変換

SQL Server CASTを使った文字列⇒日付型変換

CONVERT

CONVERTを使った変換です。(CASTと変わりませんが。。。)

select 'CONVERT(datetime, ''02/27/2018'')' as 式, CONVERT(datetime, '02/27/2018') as 結果
union all
select 'CONVERT(datetime, ''180227'')', CONVERT(datetime, '180227')
union all
select 'CONVERT(datetime, ''18/02/27'')', CONVERT(datetime, '18/02/27')
union all
select 'CONVERT(datetime, ''18/02/27 07:08:09'')', CONVERT(datetime, '18/02/27 07:08:09')
union all
select 'CONVERT(datetime, ''20180227'')', CONVERT(datetime, '20180227')
union all
select 'CONVERT(datetime, ''2018/02/27'')', CONVERT(datetime, '2018/02/27')
union all
select 'CONVERT(datetime, ''2018/02/27 07:08:09'')', CONVERT(datetime, '2018/02/27 07:08:09')

結果は、以下の通りです。

SQL Server CONVERTを使った文字列⇒日付型変換

SQL Server CONVERTを使った文字列⇒日付型変換

引数の文字列表記

CONVERT も CAST も、引数にいろいろな形式で文字列を与えることができます。
これは使用する言語によってエラーになってしまう場合もあります。

使っているSql Server の設定言語に合わせて引数の文字列を渡すか、SET DATEFORMAT を使ってそのセッションの日付フォーマットを変えるかすると安心です。
基本的に日本のサーバーであれば日本語が使用言語になっていると思いますが、私は格安のアメリカのレンタルサーバーを使うこともあるため、SET DATEFORMAT を使っています。

日本は「年月日」で表記しますが

日本は「年月日」で表記しますが、アメリカは「月日年」、ヨーロッパは「日月年」となります。
セッションの言語によって、datetime の形式とシステム メッセージが決められているので、注意しましょう。

以上、「SQL Server 文字列を日付型に変換する: CONVERT, CAST」の備忘録でした。

SQL Server 言語確認

SQL Server 言語確認

SQL Server は、使用している言語に対応してメッセージなどを表示します。
言語環境が異なるといろいろ戸惑うこと、とくに日付の表記の違いとか、があるので注意が必要です。

SQL Server 使用言語の調べ方

以下のSQLで調べることができます。

select name from syslanguages where langid=(select value from sys.configurations where name='default language')

ただし、デフォルトの言語を知ることができるのみで、セッションで設定された言語は表示されません。
セッションで設定した言語の調べ方は、私も知りません。知ってたらコメントで教えてください。

エラーメッセージ

エラーメッセージの言語も設定した言語に変わります。
言語を変えて以下のようにエラーを発生させてみます。


SET LANGUAGE japanese;
GO
test
GO

SET LANGUAGE us_english;
GO
test
GO

SET LANGUAGE Italian;
GO
test

結果は、以下のようになります。

SQL Server 使用言語の違い エラー表示

SQL Server 使用言語の違い エラー表示

「メッセージ 2812、レベル 16、状態 62、行 3」のエラー情報が日本語のままですが、「ストアド プロシージャ ‘test’ が見つかりませんでした。」はちゃんと変更されてますね。

その他の関連表記

この他にも使用言語は、以下の表記にも関係してきます。
dateformat : 日付要素の順序を指定します。 有効なパラメーターはmdy、 dmy、 ymd、 ydm、 myd、およびdym。
datefirst : 週の最初の曜日を指定します。 設定が 7 なら日曜日です。
months : 言語に合わせた月名を表示。
shortmonths : 言語に合わせた短い月名を表示。
days : 言語に合わせた曜日を表示。

この言語設定に関する情報は syslanguages を参照すると見ることができます。

select * from syslanguages
SQL Server 使用言語設定表

SQL Server 使用言語設定表

この他にもまだ言語に影響される表記もありますが、とりあえずこの辺で。
以上、「SQL Server 使用言語を調べる」でした。

Windows 10 リモートデスクトップ

Windows 10 リモートデスクトップ

PCが複数台あるときに便利な機能が リモートデスクトップ です。
ただし、デフォルトではリモートデスクトップへの接続が許可されていませんので、許可をしなくてはなりません。

リモートデスクトップの接続許可設定方法

1)コントロールパネルを開きます。
エクスプローラーからPCを右クリックして、コンテキストメニューを開き、プロパティを左クリックします。
コントロールパネルのシステムが開きます。

Windows 10 コントロールパネルを開く

Windows 10 コントロールパネルを開く

2)リモート設定画面を開きます。
左のあるサイドメニューのリモートの設定をクリックします。
システムのプロパティー画面のリモートタグが開きます。

Windows 10 リモートデスクトップの許可設定画面呼び出し

Windows 10 リモートデスクトップの許可設定画面呼び出し

3)リモートデスクトップの接続許可を行います。
下段のリモートデスクトップのオプションを「このコンピューターへのリモート接続を許可する(L)」を選択します。
「OK」ボタンをクリックします。

Windows 10 リモートデスクトップ接続の許可設定

Windows 10 リモートデスクトップ接続の許可設定

以上の設定で、基本的には接続が出来るようになっています。
まだ接続できない場合は、他に問題があるのでそちらを調査しましょう。

以上、「Windows 10 リモートデスクトップ」の紹介でした。

SQL Server 現在日時を取得する: GETDATE, SYSDATETIME

SQL Server 現在日時を取得する: GETDATE

SQL Server で、現在の日付・時刻を取得したい場合は、以下の関数で取得します。

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMP

現在のUTCの日時を取得したい場合は、以下の関数で取得します。
GETUTCDATE(), SYSUTCDATETIME()

タイム ゾーン オフセットが含まれる日時を知りたい場合は、以下の関数で取得します。
SYSDATETIMEOFFSET()

ちなみに、現在の日時と言っても実際には、SQL Servar が動いているサーバーのシステム日時を取得します。

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMP

各々、現在のデータベース システムのタイムスタンプを返します。
しかし、1 秒未満の有効桁数で比較すると、SYSDATETIME の方が GETDATE よりも高い精度を得ることができます。


select SYSDATETIME() as SYSDATETIME
, GETDATE() as GETDATE
, CURRENT_TIMESTAMP as [CURRENT_TIMESTAMP]

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMPの取得結果画面

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMPの取得結果画面

GETUTCDATE(), SYSUTCDATETIME()

各々、現在のデータベース システムのUTCのタイムスタンプを返します。
しかし、1 秒未満の有効桁数で比較すると、SYSUTCDATETIME の方が GETUTCDATE よりも高い精度を得ることができます。


select SYSUTCDATETIME() as SYSUTCDATETIME
, GETUTCDATE() as GETUTCDATE

GETUTCDATE(), SYSUTCDATETIME()の取得結果画面

GETUTCDATE(), SYSUTCDATETIME()の取得結果画面

SYSDATETIMEOFFSET()

SQL Server のインスタンスを実行しているコンピューターの日付と時刻を含む タイム ゾーン オフセットが含まれる 値を返します。


select SYSDATETIMEOFFSET() as SYSDATETIMEOFFSET

SYSDATETIMEOFFSET()の取得結果画面

SYSDATETIMEOFFSET()の取得結果画面

誤差について

SQL Server は、GetSystemTimeAsFileTime() Windows API を使用して日付と時刻の値を取得しています。
精度は、SQL Server のインスタンスが実行されているコンピューター ハードウェアおよび Windows のバージョンによって異なります。
この API の精度は 100 ナノ秒で固定されます。
精度は、GetSystemTimeAdjustment() Windows API を使用して確認できます。

以上、「SQL Server 現在日時を取得する: GETDATE, SYSDATETIME」の紹介でした。

SQL Server 2017 Express エディション のインストール

SQL Server 2017 Express エディション のインストール

Microsoft SQL Server Express は Microsoft SQL Server の無償で提供されているエディションです。
Express は、エントリ レベルのデータベースで、最大 10 GB サイズの小規模なデータ ドリブン Web アプリケーションとモバイル アプリケーションを構築できます。

コアの最大数 4 コアです。PCでテスト環境に使うには十分かと思います。
使用できるメモリは、
インスタンスあたりの最大バッファー プール サイズで、1410 MB
インスタンスあたりの最大 Columnstore セグメント キャッシュ サイズは、352MB
データベースあたりの最大メモリ最適化データ容量は、352MB
最大データベース サイズは、10GB

となっています。
こう書かれても、私もピンと来ませんが、1つのトランザクションでそれほど大きなデータ処理をしなければ、全く問題のない機能だと思います。
もし、相当に大きなデータ処理をしたいのなら、「SQL Server 2017 Developer」を入れないといけないと思います。

SQL Server 2017 Express エディション のインストールの手順は、
1)SQL Server 2017 Express のダウンロード
2)SQL Server 2017 Express のインストール

SQL Server 2017 Express のダウンロード

下のリンク先から SQL Server 2017 Express のダウンロードを行います。
SQL Server ダウンロード

SQL Server ダウンロード

SQL Server ダウンロード

ダウンロードすると、「SQLServer2017-SSEI-Expr.exe」ファイルを入手できます。

SQL Server 2017 Express のインストール

上で入手した SQLServer2017-SSEI-Expr.exe を実行します。
インストールの準備が終わると、下のような画面が表示されます。
基本(B)をクリックします。
カスタマイズを行いたい場合は、カスタム(C)をクリックしますが、SQL Server に詳しくない場合は基本(B)を選択しましょう。

SQL Server インストール開始画面

SQL Server インストール開始画面

基本(B)をクリックすると「マイクロソフト ソフトウェア ライセンス条項」の同意画面が表示されます。
同意しましょう。

次に、SQL Server インストール場所の指定画面が表示されます。
標準ではCドライブにインストールされます。ドライブを変更したい場合は変更しておきましょう。
ここではSQL Server のプログラムのインストール先の指定なので、データの入れ先は別途後からになります。

あと、空き容量の確認をしておきましょう。
問題がなければ、「インストール(I)」ボタンをクリックしてSQL Server Express の本体のダウンロード&インストールを行います。

SQL Server インストール場所の指定

SQL Server インストール場所の指定

ダウンロード中は下のような画面が表示されています。
ダウンロードはかなりのスピードで行われるので、そんなに時間も掛からないと思います。

SQL Server インストール中の画面

SQL Server インストール中の画面

ダウンロードに成功すると下のような画面が表示されます。

SQL Server ダウンロード成功

SQL Server ダウンロード成功

ダウンロードが成功して、しばらくすると、インストールに入ります。
HDD の環境次第ですが、ダウンロードより少し時間がかかると思います。

SQL Server インストール中

SQL Server インストール中

インストールが成功すると下のような画面が表示されます。
SSMS(SQL Server Management Studio)はよく使うので、「SSMS インストール(I)」をクリックしてインストールしておきましょう。
SQL Server Management Studio (SSMS) のダウンロード画面がブラウザに表示されます。

SQL Server インストール成功

SQL Server インストール成功

SQL Server Management Studio (SSMS) のダウンロード

SSMSのダウンロードを行います。
800Mを超える大きさなので少し時間が掛かります。
「SSMS-Setup-JPN.exe」ファイルがダウンロードされます。

SSMS ダウンロード

SSMS ダウンロード

SQL Server Management Studio (SSMS) のインストール

上でダウンロードした SMS-Setup-JPN.exe を実行します。
ちなみに、SQL Server Express のインストール画面が残っていると思います。SSMSが正常にダウンロードできたのなら閉じてください。

SSMS インストール開始

SSMS インストール開始

「パッケージを読み込んでいます」と言う準備が終わると下のような画面が表示されます。
完了までにしばらくかかります。

SSMS インストール中

SSMS インストール中

完了すると下のような画面が表示されます。

SSMS インストール完了

SSMS インストール完了

SSMS を起動する

早速、SSMS を起動してみましょう。
初回はユーザー設定の読み込みとかで少し時間が掛かるかもしれませんが、下のようなログイン画面が表示されます。

SSMS ログイン画面

SSMS ログイン画面

「接続」ボタンをクリックして接続しましょう。
SSMS の画面が正常に出ましたか?
SQL Server Express に正常に接続できましたか?

SSMS 画面

SSMS 画面

「新しいクエリー」ボタンをクリックして「クエリー」画面を表示しましょう。
そこで、下の SQL を発行して正常に戻ってこれば完了です。


select * from sys.sysobjects

SSMS sysobjects画面

SSMS sysobjects画面

正常に表示されていれば、これでインストール完了です。
お疲れさまでした。

SSMSとは

SSMS は、SQL Server から SQL Database まで、SQL インフラストラクチャを管理するための統合環境です。
SSMS には、SQL のインスタンスを構成、監視、および管理するためのツールが備わっています。
SSMS を使用して、アプリケーションで使われるデータ層コンポーネントを配置、監視、アップグレードしたり、クエリとスクリプトを作成したりすることもできます。

以上、「SQL Server 2017 Express エディション のインストール」の紹介でした。

CSS padding

CSS padding

padding プロパティは、上下左右の padding を指定する際に使用します。
padding には負の値を指定することはできません。
また、%で指定することも出来ます。

padding の引数の与え方は、[上][右][下][左]の順に指定します。
上下左右を異なる padding 幅にしたい場合には、スペースで区切って上右下左の時計回りの順に4の値を指定します。

しかし、引数を必ずしも4つ与える必要がなく、下のようなことも出来ます。

値を1つ指定 指定した値が[上下左右]の padding
値を2つ指定 記述した順に[上下][左右]の padding
値を3つ指定 記述した順に[上][左右][下]の padding
値を4つ指定 記述した順に[上][右][下][左]の padding

この時計回りと、省略時の設定について覚えておくと便利です。 

margin padding border

margin と padding と border には次の関係があります。
border の幅は別途 width に加算されるので覚えておかないと細かな調整が出来なくなります。

margin padding borderの関係

margin padding borderの関係

padding は Element(要素)からすぐにスペースを空けるように働きます。なので border の位置にも影響してきます。
また、要素に指定した background 色を広げます。

一方、marginは border の外からスペースを空ける働きをします。
これは、隣接する Element(要素)に対してどれだけ距離を取るかを指定しています。
スペースを取った場合の background (背景色)は、親の背景色になります。

下に少しでも理解を助けるために参考になるHTMLを貼っておきますので、メモ帳にでもコピーして、名前を test.html 等保存して動かして確認にして margin や padding, border の幅を変えていろいろ試してみてください。


<html>
<head>
<style>
input{
    font-size: 10px;
    background: #909000;
    padding: 10px 20px 30px 40px;
    border: solid 10px;
    margin: 50px 40px 30px 20px;
}
</style>
</head>
<body>

<div style='background: #c0c0c0;'>
    <input type="button" value='Button'></input>
<div>

</body>
</html>

padding は margin に比べシンプルな仕様なので簡単に把握できると思います。
以上、「CSS padding」でした。

カテゴリー: CSS

CSS margin

CSS margin

margin プロパティは、上下左右の margin を指定する際に使用します。
margin の引数の与え方は、[上][右][下][左]の順に指定します。
上下左右を異なる margin 幅にしたい場合には、スペースで区切って上右下左の時計回りの順に4の値を指定します。

しかし、引数を必ずしも4つ与える必要がなく、下のようなことも出来ます。

値を1つ指定 指定した値が[上下左右]のマージン
値を2つ指定 記述した順に[上下][左右]のマージン
値を3つ指定 記述した順に[上][左右][下]のマージン
値を4つ指定 記述した順に[上][右][下][左]のマージン

この時計回りと、省略時の設定について覚えておくと便利です。 

この margin ですが、やたらと複雑でブラウザごとに挙動が違うこともあるため、非常に厄介です。
最近ではブラウザごとの挙動も落ち着いてきた感はあるものの重なりのマイナス指定で重なりのある時など、異なることがあります。

margin padding border

margin と padding と border には次の関係があります。
border の幅は別途 width に加算されるので覚えておかないと細かな調整が出来なくなります。

margin padding borderの関係

margin padding borderの関係

marginは border の外からスペースを空ける働きをします。
これは、隣接する Element(要素)に対してどれだけ距離を取るかを指定しています。
スペースを取った場合の background (背景色)は、親の背景色になります。

一方、padding は Element(要素)からすぐにスペースを空けるように働きます。なので border の位置にも影響してきます。
また、要素に指定した background 色を広げます。

下に少しでも理解を助けるために参考になるHTMLを貼っておきますので、メモ帳にでもコピーして、名前を test.html 等保存して動かして確認にして margin や padding, border の幅を変えていろいろ試してみてください。


<html>
<head>
<style>
input{
    font-size: 10px;
    background: #909000;
    padding: 10px 20px 30px 40px;
    border: solid 10px;
    margin: 50px 40px 30px 20px;
}
</style>
</head>
<body>

<div style='background: #c0c0c0;'>
    <input type="button" value='Button'></input>
<div>

</body>
</html>

margin の相殺

margin をわかり辛くしているのに相殺があります。
margin の相殺は上下 top と bottom の間で発生します。その際、margin は結合される(折り畳まれる (collapsed))ことがあり、結合される margin のうち大きなほうのサイズを持った一つの margin になります。
ただ、すべてのケースで相殺が起こるかと言うと、そうではないです。
・floatしている要素は、相殺が起きません。
・absolute と fixed を指定された要素は相殺されません。

単純な相殺は、大きなほうのサイズを持った margin が採用されますのでわかりやすいと思います。
親子での相殺や親子親子での相殺になってくると、かなり面倒になりますね。複雑な CSS を書くなら意識して設計を行う必要があます。
相殺が起きないケースは、一般的に使用する機械が少ないので割愛しますが、このレベルで仕事をされるようなら仕様までしっかり把握する必要があります。

negative margin(ネガティブ・マージン)

negative margin とは、マイナス方向に margin を設定することを言います。
単純な例では、少しだけはみ出させたい場合に使われます。

でも、margin の数値をマイナス指定することによって、要素を移動させ配置することができるので、配置に使うこともあります。
negative margin は理解している人にはとても便利なのですが、margin を複雑にしている一因です。
興味があるようなら negative margin で検索してみてください。

以上、最初は戸惑う「CSS margin」でした。

カテゴリー: CSS

Windows 10 アップグレード 無償アップグレードの期間切れ後の状況

Windows 10 アップグレード 無償

既にWindows 7 や Windows 8.1 からの Windows 10 への無償アップグレードの期間はとっくに過ぎていますが、2018/02/01時点でまだ無償でアップグレードできました。

いろいろな条件があるのだと思いますが、まだ無償アップグレードを実施していない方も居ると思いますので、経緯だけ報告します。
ちなみに、公式には以下の通りです。
Windows 10 無償アップグレード キャンペーンは、2016年7月29日まで。
支援技術をご利用の方向け Windows 10 アップグレードは、2017年12月31日まで。

また、一度アップグレードして、またダウングレードした場合は、上の期間にかかわらず無償でアップグレードできるそうです。

今回は、一度も Windows 10 にアップグレードしていないPCで無償アップグレードを試みました。

アップグレードしたPCについて

今回 Windows 10 にアップグレードしたPCですが、ほぼ放置状態のDELLのノートPCです。
OSは Windows XP が入っており、CPU も celeron M でメモリも 1.5G といたってショボショボのPCです。
しかし、そんなショボショボのノートPCに頼らざるを得ない状況になり、急遽「Windows 10」にしよう!となった次第です。

ちなみに、無償アップグレードの期間が過ぎているのを知っていたので、 Windows 10 を別途購入して載せようと思っていたのですが、とりあえずやってみようと思いチャレンジしてみました。

インストール手順

まず、手持ちの Windows 7 starter にアップグレードしました。
クリーンインストールではなく、上書きインストールです。
サービスパック1まで当たっていました。

※ここで Windows 7 starter のライセンス認証を行いました。

HDDの空き容量に少し不安が有ったので、Windows 7 の Windows フォルダーやProgram files フォルダーを地道に削除しました。

次に「Windows 10 ダウンロード」へ行き、「ツールを今すぐダウンロード」をクリックしてツールをダウンロードしました。
その後、ツールを起動しそのまま Windows 10 のインストールを行いました。
その後は放置状態で数時間後に確認したら Windows 10 home が正常にインストールされており、ライセンス認証もされたままでした。

無償アップグレードはいつまで出来るの?

これは無償アップグレードいつ出来なくなっても仕方のないことなので、出来るときにやっておくのが良いと思います。
が、Windows 7 のサポート期間のうちはそのまま使いたいなどの要望もありますし。。。
一度アップグレードして戻すにしても、手間やリスクもあるわけで。。。

公式発表していてもまだできるってことは、簡単に検知できるような仕組みになっていなくて、疑わしきはOKって判断でライセンス認証を通しているのかもしれませんね。
とりあえず、上のインストール手順で無償アップグレードが出来ました。

まだ、Windows 10 の無償アップグレードしていないPCを持っている人は、気が向いたときに試してみてください。
以上、「Windows 10 アップグレード 無償」で出来た報告まで。