info

category : MySQL
[PHP,MySQL]生年月日から年齢を算出する  @ PHP , MySQL 2017年3月23日
生年月日から年齢を算出する

■PHP
$birth = '1952-01-26 00:00:00';
$age = (int) ((date('Ymd') - preg_replace('/([\- ]|[0-9]{2}:[0-9]{2}:[0-9]{2})/','',$birth)) / 10000);
echo $age;

結果
65

■MySQL

new_users
id name birth
1 1-名前 1941-01-26 17:30:56
2 2-名前 1952-07-07 00:30:56
3 3-名前 1976-09-02 17:30:56
4 4-名前 1990-05-13 05:00:00
5 5-名前 2016-11-26 17:30:56
6 6-名前 1999-04-01 11:11:11

SQL
SELECT
id,
name,
birth,
DATE_FORMAT(birth, '%Y%m%d') AS tmp_birth,
DATE_FORMAT(NOW(), '%Y%m%d') AS now_date,
FLOOR((DATE_FORMAT(NOW(), '%Y%m%d') - DATE_FORMAT(birth, '%Y%m%d')) / 10000) AS age
FROM new_users
ORDER BY id ASC

結果
id name birth tmp_birth now_date age
1 1-名前 1941-01-26 17:30:56 19410126 20170126 76
2 2-名前 1952-07-07 00:30:56 19520707 20170126 64
3 3-名前 1976-09-02 17:30:56 19760902 20170126 40
4 4-名前 1990-05-13 05:00:00 19900513 20170126 26
5 5-名前 2016-11-26 17:30:56 20161126 20170126 0
6 6-名前 1999-04-01 11:11:11 19990401 20170126 17
[MySQL]SUBSTRING  @ MySQL 2017年2月23日
開始位置は1からなので注意

all_test
id name tel zip
1 あいう 09011112222 1112222
2 なにぬ 09033334444 3334444
3 かきく 09055556666 7775555
4 さしす 09077778888 9002144

SQL
SELECT id,name,tel,zip,SUBSTRING(zip,1,3) AS zip1,SUBSTRING(zip,4,4) AS zip2
FROM all_test
ORDER BY id ASC;

結果
id name tel zip zip1 zip2
1 あいう 09011112222 1112222 111 2222
2 なにぬ 09033334444 3334444 333 4444
3 かきく 09055556666 7775555 777 5555
4 さしす 09077778888 9002144 900 2144
[MySQL]FIND_IN_SET  @ MySQL 2017年1月23日
下記2つのテーブルをtelカラムでjoinしたい

all_test
id name tel
1 あいう 09011112222
2 なにぬ 09033334444
3 かきく 09055556666
4 さしす 09077778888

sub_infos
id tel address
1 090-3333-4444 東京都港区赤坂1-2-2
2 090-7777-8888 神奈川県横浜市中区4-32-4

SQL
SELECT a.id,a.name,a.tel,s.id AS sub_id,s.tel AS sub_tel
FROM all_test AS a
LEFT JOIN sub_infos AS s
ON FIND_IN_SET(a.tel,REPLACE(s.tel,'-',''))
ORDER BY id ASC;

結果
id name tel sub_id sub_tel
1 あいう 09011112222
2 なにぬ 09033334444 1 090-3333-4444
3 かきく 09055556666
4 さしす 09077778888 2 090-7777-8888
[MySQL]XAMPP+コマンドプロンプト  @ MySQL , XAMPP 2016年12月15日
XAMPP+コマンドプロンプト
MySQLのダンプファイルをリストアする時、文字コードを揃えないと文字化けする。
ダンプファイルがUTF-8の時
chcp 65001
mysql -u user -p < C:\xampp\htdocs\abc.dump

その後確認する時
chcp 932
mysql -u user -p ※MySQLログイン
set names sijis
select * from tablename;
[Ruby]MySQLからデータ取得  @ MySQL , Ruby 2014年9月2日
MySQLからデータ取得

サンプル
#!/usr/bin/ruby-1.9.3
# coding: utf-8
require 'json'
require 'mysql'

puts "Content-type: application/json\n\n"

connection = Mysql.connect('host','user','password','db name')
connection.query("set character set utf8") #文字化けするとき

columns=["ID","post_title","post_date"]
result = connection.query("SELECT "+columns.join(",")+" FROM wp_posts WHERE post_status='publish' ORDER BY ID DESC LIMIT 5")
connection.close

results=Array.new
result.each {|record|
    w = {}
    record.each_with_index{|val,i|
        key = columns[i]
        w[key.force_encoding("utf-8")]=val.force_encoding("utf-8") #文字化けするときforce_encoding
    }
    results.push(w)
}
puts JSON.generate({'time'=>Time.now.strftime("%Y-%m-%d %H:%M:%S"), 'data'=>results})
[MySQL]MySQLの文字コードの設定を確認する  @ MySQL 2014年9月1日
MySQLの文字コードの設定を確認する

クエリ
SHOW VARIABLES LIKE 'character_set%'

結果
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
[MySQL]ビット演算#1  @ MySQL 2014年6月1日
ビット演算#1
type(INTEGER)を4ビット右シフトして右端が1であるレコードのidとtypeを取得する。
SELECT id,type FROM target_table_name WHERE type >> 4 & 1 = 1;
[PHP]INSERT文を作る  @ PHP , MySQL , SQLite3 2014年4月3日
INSERT文を作る
echo getInsertQueryByKey('system_table', array('name','gender'), array( array('jeff','male'), array('pola','female') ) );

function getInsertQueryByKey($tableName,$columns,$datas){

	//SQLite古いバージョン
	$w=array();

	$column = implode(',', $columns);
	$query="INSERT INTO {$tableName} ({$column}) SELECT ";
	$tmp=array();
	foreach ($columns as $index => $columnName) {
		$tmp[] = "'". $datas[0][$index] . "'" . ' AS ' . $columnName;
	}
	$query .= implode(', ', $tmp);
	$w[]=$query;

	foreach ($datas as $index => $data) {
		if($index<1)continue;
		$tmp=array();
		foreach ($columns as $index2 => $columnName) {
			$tmp[]=$data[$index2];
		}
		$w[]="'".implode("', '", $tmp)."'";
	}

	return implode(' UNION ALL SELECT ', $w).';';

	/* MySQL or SQLite(バージョン 3.7.11以降)
	$queryValues=array();
	foreach ($datas as $index => $value) {
		$values=array();
		foreach ($value as $index2 => $value2) {
			$values[]="'".$value2."'";
		}
		$queryValues[]='('.implode(',', $values).')';
	}

	$column=implode(',', $columns);
	$value=implode(',', $queryValues);
	$sql="INSERT INTO {$tableName} ({$column}) VALUES {$value};";
	return $sql;
	*/
}