プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

初学者に向けた2日間のPython講座を企画してみました!!

f:id:hanabusa-snow:20210416140905p:plain

Python学んでみたい方! 特に、初学者だけど自分ひとりでやるには自信がなくて教えてほしいと思っている方!!

ぜひご参加ください

【Python(告知)】無料オンラインセミナーのお知らせ

f:id:hanabusa-snow:20210215100601p:plain

Python初学者のための講座やります!!

以前も開催してご好評をいただいたPyhon初学者セミナーを再度実施することになりました。
参加ご希望の方は東京創業ステーションのWebサイトよりお申し込みください。

  1. プログラミングをはじめてみたいがどのようにはじめればよいかわからない。
  2. Pythonを触ってみたいけど、導入をどうすればわかならい。 etc...
    そんな方、ぜひご参加いただければ幸いです。

参加にあたり、制限はなくどなたでも参加OKですので、ご気軽にご参加ください。
また、拡散いただければ幸いですm(_ _)m

ご参加お待ちしております(^^♪

bit.ly

【SQL Server(連載)】動的SQL -45-

www.pon-x.jp

前回の続き

今回は、動的にSQLを生成してみようと思います。

SQLを文字列として変数に格納

これ自体はそんなに難しいものではありません。

DECLARE @SQL NVARCHAR(500)

SET @SQL = 'SELECT * FROM Person.Person'

EXEC (@SQL)

上記は「SELECT * FROM Person.Person」を実行しているのと同じ結果です。
SQL文字列をEXEC()で実行することができます。

こんなかんじ。
f:id:hanabusa-snow:20210214001431p:plain

動的な変数

ここまで読んでくれた方、「これ意味あるの!?」とおもいますよね。
およらく、多くは変数の部分を動的に使うから意味があると思うので、紹介します。

例えば、PersonTypeの値を動的に変えてあげる動的SQLを作成しています。

DECLARE @SQL NVARCHAR(500)
DECLARE @PARAM NVARCHAR(10)

SET @PARAM = '''EM'''

SET @SQL = 'SELECT * FROM Person.Person '
SET @SQL += 'WHERE PersonType = '
SET @SQL += @PARAM

EXEC (@SQL)

結果はこんな感じ
f:id:hanabusa-snow:20210214002126p:plain

SQLでは、文字列はシングルクォーテーションでくくるというルールがややこしいですね。

以下のSQLで出力を確認してみるとよくわかると思います。

DECLARE @PARAM NVARCHAR(10)

SET @PARAM = '''EM'''

PRINT @PARAM

こんなかんじ
f:id:hanabusa-snow:20210214002219p:plain

実は、シングルクォーテーションは文字列をくくる以外に、エスケープという目的があります。
つまり、「'''」は2つ目のシングルクォーテーションが3つ目のシングルクォーテーションをエスケープしているので、
「 '''EM'''」は、1つ目と最後のシングルクォーテーションにくくられている「'E'」ということになるのです。



以上、今回はここまで。

【SQL Server(連載)】外部ファイルの読み込み -44-

www.pon-x.jp

前回の続き

今回は、外部ファイルを読み込む方法を紹介します。

BULK INSERT

SQLSeverで外部ファイルを取り込む方法としての王道はBULKINSERTです。
では、さっそくやってみます。

BULK INSERT [テーブル名]
FROM 'C:\Users\***\TEST.CSV'
WITH (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)

解説します。

BULK INSERT [テーブル名]

取り込むテーブルを指定します。

FROM 'C:\Users\***\TEST.CSV'

取り込むファイルを指定します。

FIELDTERMINATOR = ',',

今回はカンマ区切りのCSVファイルなので、カンマで区切られているということを指定する。

ROWTERMINATOR = '\n'

改行コードを指定します。\nや\r\nなどの場合があるので、テキストエディタなどで確認してみましょう。

WITHオプション

WITHのカッコ内でオプションを指定することで、細かい制御が可能です。

このページがよくまとめてあるので、参考になると思います。

www.pasokuma.net






以上、BULKINSERTを一時テーブルに入れてあげて、カーソルで回してあげて処理するなんて応用も考えられますね!!
今回はここまで。

【SQL Server(連載)】日付型の続き -43-

www.pon-x.jp

前回の続き

今回は、前回お伝え出来なかった日付型の内容の続きを紹介します。

DATEDIFF

2つの日付間の間隔をとることができます。
以外に結構使うんですよね。

年、月、日、時、分、秒ごとに計測してみます。

DECLARE @DATE01 DATETIME = '2021-01-13 10:10:10.010',
        @DATE02 DATETIME = '2023-04-01 00:00:00.000';


SELECT  DATEDIFF(yy, @DATE01, @DATE02) AS yy,
        DATEDIFF(mm, @DATE01, @DATE02) AS mm,
        DATEDIFF(dd, @DATE01, @DATE02) AS dd,
        DATEDIFF(hh, @DATE01, @DATE02) AS hh,
        DATEDIFF(mi, @DATE01, @DATE02) AS mi,
        DATEDIFF(ss, @DATE01, @DATE02) AS ss

こんなかんじです。
f:id:hanabusa-snow:20210113100113p:plain

ISDATE

データが、DATE型なのかを確認します。
さまざまな形式を確かめてみましょう。

DECLARE @DATE01 VARCHAR(30) = '2021-01-13',
        @DATE02 VARCHAR(30) = '01-13-2021',
        @DATE03 VARCHAR(30) = '2021-01-13 00:00:00:000',
        @DATE04 VARCHAR(30) = 123456,
        @DATE05 VARCHAR(30) = '123456';

SELECT  ISDATE(@DATE01) AS '2021-01-13',
        ISDATE(@DATE02) AS '01-13-2021',
        ISDATE(@DATE03) AS '2021-01-13 00:00:00:000',
        ISDATE(@DATE04) AS _INT,
        ISDATE(@DATE05) AS _CHR

こんなかんじです。
f:id:hanabusa-snow:20210113100847p:plain




文字型を日付型として扱うときにはISDATEで確認してから、DATEADDとかDATEDIFFとかやればエラーなく行けそうですね。

【SQL Server(連載)】日付型 -42-

www.pon-x.jp

今回は、日付型の扱い方を紹介していきます。

CONVERT関数

CONVERT関数は、データ型の変更を行ってくれます。
例えばこんな感じ。

 SELECT 
    GETDATE(),
    CONVERT(NVARCHAR, GETDATE())

GETDATE()は、現時点の日時を取得してくれるもので、CONVERT(NVARCHAR, GETDATE())は、現在日時を文字型に変換したということになります。
f:id:hanabusa-snow:20210112090504p:plain

国ごとの表記法

年月日は国ごとに表記法が異なります。
そこで、CONVERT関数の第3引数に指定することによって制御可能です。
例えばこんな感じ

DECLARE @Date DATETIME = GETDATE();

SELECT   
         CONVERT(NVARCHAR, @Date, 101) AS '米国4桁',
         CONVERT(NVARCHAR, @Date, 1) AS '米国2桁',
         CONVERT(NVARCHAR, @Date, 111) AS '日本4桁',
         CONVERT(NVARCHAR, @Date, 11) AS '日本2桁'

f:id:hanabusa-snow:20210112090837p:plain

他の国など詳しくは以下を見てみよう。

docs.microsoft.com

日時の加減

基準となる日から、日にちや時間をずらすことも可能だ。
例えば、本日から日にちをずらしてみる。

DECLARE @Today DATETIME = GETDATE()
DECLARE @Day_01 DATETIME = dateadd(DAY,1,GETDATE())
DECLARE @Week_01 DATETIME = dateadd(WEEK,-1,GETDATE())
DECLARE @Month_01 DATETIME = dateadd(MONTH,1,GETDATE())
DECLARE @Quarter_01 DATETIME = dateadd(QUARTER,-1,GETDATE())
DECLARE @Year_01 DATETIME = dateadd(YEAR,10,GETDATE())

SELECT 
    CONVERT(NVARCHAR, @Today, 111) AS '本日',
    CONVERT(NVARCHAR, @Day_01, 111) AS '1日後',
    CONVERT(NVARCHAR, @WEEK_01, 111) AS '1週前',
    CONVERT(NVARCHAR, @Month_01, 111) AS '1月後',
    CONVERT(NVARCHAR, @Quarter_01, 111) AS '3月前',
    CONVERT(NVARCHAR, @Year_10, 111) AS '10年後'

f:id:hanabusa-snow:20210112091842p:plain

時間もこの通り

DECLARE @Today DATETIME = GETDATE()
DECLARE @Hour_01 DATETIME = dateadd(HOUR,1,GETDATE())
DECLARE @Minutie_01 DATETIME = dateadd(MINUTE,-1,GETDATE())
DECLARE @Second_01 DATETIME = dateadd(SECOND,1,GETDATE())


SELECT 
    @Today AS '現在',
    @Hour_01 AS '1時間後',
    @Minutie_01 AS '1分前',
    @Second_01 AS '1秒後'

f:id:hanabusa-snow:20210112092100p:plain







以上今回はここまで。