SQL Server 便利な日付関数:DATEADD DATEDIFF

SQL Server 便利な日付関数:DATEADD DATEDIFF

Sql Server は、日付の演算を行える関数を2つ実装しています。

DATEADD

DATEADDは引数に指定した日時要素*間隔分を日時に加算(減算)する関数です。
DATEADD(日時要素, 間隔, 日時)
日時要素は、以下のように指定します。
 年:year, yy, yyy
 四半期:quarter, qq, q
 月:month, mm, m
 日:dayofyear, dy, y, day, dd, d
 週:week, wk, ww
 時:hour, hh
 分:minute, mi, n
 秒:second, ss, s
 ミリ秒:millisecond, ms
 マイクロ秒:microsecond, mcs
 ナノ:nanosecond, ns

間隔は、整数値で指定します。加算ならそのまま、減算なら負の整数値で指定します。
日時は、演算を行いたい日付型データです。

以下の例は、現在日時に対し、いくつかの演算を行っています。

declare @dd datetime
set @dd = getdate()

--DATEADD
select '--基準日--' as 加算データ, @dd as 結果
union all
select '1年プラス', DATEADD(year, 1, @dd)			--1年プラス
union all
select '1年マイナス', DATEADD(year, 1, @dd)		--1年マイナス
union all
select '1月プラス', DATEADD(month, 1, @dd)			--1月プラス
union all
select '1月マイナス', DATEADD(month, -1, @dd)		--1月マイナス
union all
select '1日プラス', DATEADD(day, 10, @dd)			--1日プラス
union all
select '1日マイナス', DATEADD(day, -10, @dd)		--1日マイナス
union all
select '1時間プラス', DATEADD(hour, 1, @dd)		--1時間プラス
union all  
select '1時間マイナス', DATEADD(hour, -1, @dd)		--1時間マイナス
union all  
select '1分プラス', DATEADD(minute, 10, @dd)		--10分プラス  
union all  
select '1分マイナス', DATEADD(minute, -10, @dd)	--10分マイナス  
union all  
select '30秒プラス', DATEADD(second, 30, @dd)	--30秒プラス
union all  
SELECT '30秒マイナス', DATEADD(second, -30, @dd)	--30秒マイナス
DATEADD 結果

DATEADD 結果

DATEDIFF

DATEDIFFは、指定した日時要素単位で 2 つの日付の時間間隔を調べることができます。たとえば、2 つの日付の間の日数や、現在から年末までの週の数などを求めることができます。
DATEDIFF(日時要素, 開始日時, 終了日時, [,firstdayofweek or firstweekofyear])

下の例で @dend に設定する数値を替えいろいろ試して挙動を確認してください。

declare @dstart datetime
declare @dend datetime

set @dstart = getdate()
set @dend = dateadd(day, 100, @dstart)
select @dstart as 開始日時, @dend as 終了日時 

select 'DATEDIFF(year, @dstart, @dend)' as 式, DATEDIFF(year, @dstart, @dend) as 差
union all
select 'DATEDIFF(month, @dstart, @dend)', DATEDIFF(month, @dstart, @dend)
union all
select 'DATEDIFF(week, @dstart, @dend)', DATEDIFF(week, @dstart, @dend)
union all
select 'DATEDIFF(day, @dstart, @dend)', DATEDIFF(day, @dstart, @dend)
union all
select 'DATEDIFF(hour, @dstart, @dend)', DATEDIFF(hour, @dstart, @dend)
union all
select 'DATEDIFF(minute, @dstart, @dend)', DATEDIFF(minute, @dstart, @dend)
DATEDIFF 結果

DATEDIFF 結果

以上、「SQL Server 便利な日付関数:DATEADD DATEDIFF」でした。

Windows Chrome Sleep 後にホストを解決しています

Windows Chrome Sleep 後にホストを解決しています

ここひと月くらいの現象なのですが、Windows を sleep させた、もしくは勝手に sleep したから復帰後の Chrome の動作が「ホストを解決しています」となって応答がなくなります。
私の PC だけの現象かどうかもよくわからないのですが、「ホストを解決しています」となって応答がなくなります。

で、コマンドプロンプトで nslookup で www.yahoo.co.jp を問合せると即答で帰ってきます。
念のため、Microsoft Edge でwww.yahoo.co.jp を開くと即表示されます。

このことから、この現象は Chrome 固有の現象と思われます。

Chrome ホスト解決

chrome://net-internals/#dns

Chrome はどうやら独自でDNSをもっているようです。
chrome://net-internals/#dns

Chrome net-internals-dns

Chrome net-internals-dns

www.yahoo.co.jp を検索すると、ちゃんとあります。

Chrome net-internals-dns-yahoo

Chrome net-internals-dns-yahoo


気になるのは、TTL がマイナスになっており、Expired となっているあたりですが、chrome の DNS を clear 後再アクセスすると正常なようですので問題はなさそうです。
Chrome net-internals-dns-yahoo DNS削除後再アクセス

Chrome net-internals-dns-yahoo DNS削除後再アクセス

仕組みは良くわかりませんが、chrome は自分の DNS を使っていると言うことでしょうか?
非同期DNS設定は、内部 DNS クライアントが有効:false となっているのですが、これも良くわかりません。

ちなみに同じように chrome のホストを解決で遅延が出ている人の解決策を見ると、
・chrome の DNS を clear
・Windows の DNS を clear
これで解決できる時もあると出ているのですが、私の場合の Sleep 後に「ホストを解決しています」では改善されませんでした。

URL(ホスト名)でなく、IPアドレスでアクセス

ホスト名が解決できないのなら、URL(ホスト名)でなく、IPアドレスでアクセスしてみたらどうなるか?
やってみました。

Chrome IPアドレスでアクセス

Chrome IPアドレスでアクセス


結果は、「ホストを解決しています」が表示されないだけで、全く同じタイミングで待たされました。

このことから、本当の原因はホストを解決ではないと推測されます。

本当の原因

sleep からの復帰後、2分ほど放置してからアクセスしてみました。
正常に即表示されます。

どうしてここひと月くらいで待たされるようになったのか分かりませんが、chrome の変更でも有ったのでしょう。
シャットダウンしてから立ち上げたときは、遅くならないので sleep 絡みでなにかありそうです。

本当の原因は、高速化させるために事前に fetch でもしていると言うところでしょうか?
であれば、「ホストを解決しています」は、今アクセスしている URL のホストを解決しているのでなく、全体の事前準備の時間と捉えられるかもしれません。
高速化のために、sleep 復帰からの30秒くらいの時間はその代償ということにしておきましょう。

以上、「Windows Chrome Sleep後にホストを解決しています」についてでした。

追伸
本当に DNS が解決出来ていない時もたぶん同様の内容でメッセージが出ると思います。
その場合は、
1)コマンドプロンプトを開く
2)nslookup www.yahoo.co.jp

nslookup

nslookup


で、IPアドレスが正常に表示さなければ、DNS が解決できていないことになります。

また、
1)コマンドプロンプトを開く
2)ipcongif
で、IPアドレスが正常に取得されていないようであれば、そもそもルーターと接続出来ていない状態です。

ipconfig

ipconfig

上の方法で大まかなネットワーク障害の切り分けをしてください。

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 アップグレード 無償」で出来た報告まで。