mysqlで既に入っているDATE型の値を置換したいのですが
どうしたらよいのかわからなくて困っています。

行いたい事
2000-11-20 となっている値を
2000-01-01 の様に年をそのままに月日だけを01-01に置き換えたいのです。
そのカラム全てのデータを1月1日に置き換えたいです。

updateとreplaceを用いたら良いのかと思い以下の様なSQL文を作りました
UPDATE tablename SET startdate = REPLACE(
startdate,"%y-%M-%d","yyyy-01-01");
これで合ってますでしょうか。
多分間違ってると思うんですが、どう間違ってるのかもわかりません。

初心者の教えて君で申し訳ないのですが、お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

REPLACE(startdate,"%y-%M-%d","yyyy-01-01") だと、startdateの値の中の"%y-%M-%d"という文字列を"yyyy-01-01"に置換えようとするので、結局 startdate の値そのままになるかと。


YEAR関数を使って年を取得し、MAKEDATEを使ってその年の1/1を作ったらどうでしょう?

UPDATE tablename SET startdate = MAKEDATE(YEAR(startdate), 1);

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/date-and- …
    • good
    • 0
この回答へのお礼

試してみたところ狙い通りの動きをしてくれました。
感激で涙が出そうです。
今後のためにもMAKEDATEについてもうすこし調べてみたいと思います。
ありがとうございました!

お礼日時:2009/05/18 09:48

startdate=DATE_FORMAT(startdate,'%Y-01-01')


でよいのでは?
    • good
    • 0
この回答へのお礼

お早い回答ありがとうございます!
試してみたところ
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
というエラーをはかれてしまいました・・・。
しかし、DATE_FORMATというものがあることがわかったので
こちらも調べたいと思います!

お礼日時:2009/05/18 09:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qカレンダーを作成し、特定の日付の上に丸印をつける方法はありますか。

カレンダーを作成し、特定の日付の上に丸印をつける方法はありますか。
日付の上に丸印を付けると、下の日付の数字が消えてしまいます。

Aベストアンサー

エクセルを使ってのカレンダー作成だと仮定して、NO.1さんの回答の補足をします。

まず「オートシェイプ」の○機能を使って図形を描くと、図形の周囲を囲むように○が表示されますよね。
ここをダブルクリックすると「オートシェイプの書式設定」が出てきます。
その中の「色と線」の塗りつぶし"色"の部分が初期設定の「自動(白)」になっていると思いますが、ここを「塗りつぶしなし」に変更すると下の線や文字が表示されるようになります。

ちなみに、円を描くときにシフトキーを押しながら描くと、楕円ではなく「まん丸」な円を描くことが出来ますよ。

Qmysql コマンドの--safe-updatesでUPDATEできません

お世話になります。
--safe-updatesのモードのことでわからず困っております。

WHEREで制限しなければUPDATEできないようにしようと、
mysql -uroot -p**** --safe-updates
でモニタを起動し、次のテーブルtestに対して
+------+------+------+
| bang | uria | tuki |
+------+------+------+
| A101 | 184 | 4 |
| A107 | 777 | 6 |
+------+------+------+
update test set bang='ttt' where uria=777;
とすると、safe update modeの理由のエラーになってしまいます。
同じことを、通常のモードのモニタでは実行できます。
where句を付けているので実行できないのは、なぜでしょうか。
バージョンは5.0.45です。
どなたか、お教えいただけないでしょうか。

Aベストアンサー

--safe-updatesは、以下のように操作を制限しているようです。

(1)検索条件がないupdateやdeleteの禁止
(2)検索条件で指定した列に、インデクスが未定義の場合は、(1)と同様。

上記の(2)に、引っ掛かったのでは?

create index test_idx on test(uria)

といったインデクスを定義し、実行してみてください。

Q原付の保証書に販売店印と日付が無いんです。

原付を買いましたが保証書に日付と販売店印がありません。
買ったところに電話しました。
『無くても買った日付もわかるし何かあったら直しますよ』とのこと。
田舎の近所のバイク屋のおじいさんです。

原付の保証書に販売店印と日付が無くってもかいませんか?

Aベストアンサー

保障期間を、ある程度過ぎても、保障を伸ばしてもらえると思っても良いと思います。おじさんも「直しますよ」と言ってくれていますし。消耗品は、直してくれませんが。
安くて品数の豊富な大手電気店より街の電気屋さんは、融通が利くと言いますし。
自賠責もその店で加入したなら、領収書とともに、1ヶ月の無料点検もありますし。証拠は、沢山あります。
購入して半年になる私の、バイクにも販売店の印しか捺印していなかったです。(今、確認しました)

QUPDATE - LIMIT 1の警告について

ステートメントベースのレプリケーションをしている時に、
UPDATE 文でLIMIT 句を使用すると以下の様な警告が出ます。

[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Statement: DELETE FROM `__TABLE__` WHERE `user_id` = 1234 LIMIT 1

データ更新時にRAND()を使ったりした場合、
ORDER BYの結果が異なってしまうのが理由だと思うのですが、
ORDER BYしていないQueryに対してもwarnが出ています。

それとも何かほかに理由があるのでしょうか?

Aベストアンサー

>DELETE FROM `__TABLE__` WHERE `user_id` = 1234 LIMIT 1

user_idがユニーク属性なカラムならLIMITはいりません
逆にユニークではないならLIMITによる抽出はレコードを特定できません。
LIMITは最初に出現する1つですが、ORDER BYしない場合は出現順は保証されないからです。

単体で運用しているならともかくレプリケーションを前提とするなら
更新や削除は厳密にデータを特定できる指定をしてください

Qはがきの日付印について

郵便はがきを出すことになりました。

これは、郵便局の日付印をもらうためです。

一般に、確定日付というのだそうですが、日付の証明になるということで利用しようと思いました。ところが、最近は機械化のせいか日付の薄いスタンプがよくあり、できればはっきりした日付印が欲しいのですが、この場合どうしたらいいのでしょうか。

ポストではなく窓口で投函すれば、スタンプははっきり押してもらえるのでしょうか。それとも特別に窓口でお願いすべき、また、お願いできるのでしょうか。

教えてください。

Aベストアンサー

元・郵便局員です。

1.郵便物の集配を行う郵便局の場合
郵便窓口および郵便時間外窓口(ゆうゆう窓口)の営業時間内にお越しいただき、
「この場で、消印を押してください!」
とお申し出いただければ、押印します。

2.郵便物の集配を行わない郵便局の場合
「郵便局長が業務上差し支えないと判断した場合」に限り、その場で押印します。
支障があると判断した場合は、「押印しません」。

上記は、ごく普通の消印の場合です。http://www.geocities.co.jp/Playtown-Domino/5995/phi_gif/049.gif


つぎに、普通でない消印の場合ですが、最初の回答者様の回答にあります「風景スタンプ」(風景入り通信日付印)などの場合は、業務上の支障の有無に関係なく、差し出された郵便局で押印します。なお、全ての郵便局には配備されていないため、差し出し前にご確認ください。

Q4バイトUTF-8文字でUPDATEするには?

お世話になります。

Windows7 Pro 32bit SP1内に、
MySQL Ver5.5.12と、
phpMyAdmin Ver3.3.10.1を入れています。
(ほかに、
 Apache HTTP Server 2.2.19(VC9)、
 Apache Tomcat 6.0.32、
 PHP 5.3.6(VC9 x86 ts)、
 Eclipse3.6(Helios) pleiades-All-In-One(Java)なども)

この開発環境で、
phpMyAdminを開いて、
文字コードとしてUTF-8(3バイト以内の文字)では、
SQL文のUPDATE処理等が、
問題無く動作していることを確認済です。

そこで、質問内容ですが、
UTF-8で4バイトになる文字(JIS X 0213の漢字第3・第4水準の一部が4バイトになる)、
「JIS X 0213(1面)(漢字第3水準)」
Unicode:U+2000B
UTF-16 :0xD840 0xDC0B
の文字である、"

Aベストアンサー

直接の回答になっていませんが、MySQL 5.5.9で
character_set_client    :utf8mb4
character_set_connection :utf8mb4
character_set_database  :utf8mb4
character_set_filesystem :binary
character_set_results   :utf8mb4
character_set_server   :utf8mb4
character_set_system   :utf8
の状況で、rubyからなら「

Q日付の薄い領収印について

次回の確定申告で医療費控除の手続きをする者です。
通院・入院の領収書をチェックしていたところ、どれも領収印が薄く日付の判別が出来ないことに気付きました。日付印とは別に発行日も印刷されているので、それで判るものもありますが、肝心の高額な入院費の領収書は、支払った1日前の日付で印刷されており、隠すようにその上に収入印紙が貼られていて、なおかつ領収印は読み取れない程薄いです。こんな状態で発行しておいて、「再発行はいたしません」と書かれてあります。来年申告の時期になって『無効』になったりしないか心配です。これで大丈夫でしょうか?
よろしくお願いします。

Aベストアンサー

医療費控除は、その年1月1日~12月31日までに実際に支払ったものが対象となりますので、そもそもは日付が確認できるべきものでなければならないとは思います。

ただ、実際には、ひとつひとつチェックするとは限りませんし、明らかに別の年の領収書でない限りは、薄くて良く見えない程度であれば、そのまま受け付けてもらえるものと思います。

気になるようでしたら、ご自分で別途で、一覧表のようなものを作られたら良いと思います。
医療機関と、治療を受けられた方の名前と、支払った月日と金額ですね。
それと、医療費控除には、通院等にかかる電車・バス等の公共交通機関による交通費も対象となり、これについては領収書は不要で、メモ書き等で良いので、このような一覧表の一番右等に、かかった交通費を記載している方も結構いらっしゃいますし、そのような表があれば、明らかに違う年とわからない限りは否定もし難い訳ですので、より無難とは思います。
エクセルを使えるようであれば、エクセルで作られても良いと思います。
(もちろん、そのような日ごとの一覧表が必須、という訳ではありませんので、それがなくても認められるとは思いますが)

医療費控除は、その年1月1日~12月31日までに実際に支払ったものが対象となりますので、そもそもは日付が確認できるべきものでなければならないとは思います。

ただ、実際には、ひとつひとつチェックするとは限りませんし、明らかに別の年の領収書でない限りは、薄くて良く見えない程度であれば、そのまま受け付けてもらえるものと思います。

気になるようでしたら、ご自分で別途で、一覧表のようなものを作られたら良いと思います。
医療機関と、治療を受けられた方の名前と、支払った月日と金額で...続きを読む

Q複数カラム検索で、LIKE "%検索語%"

複数カラム検索をしたいと思い、リンク先の通り、
WHERE concat(field1,char(0),field2) LIKE "%検索語%"
としたらうまくいったのですが、
そのページに書いてあることが気になるので、教えてください
▽MySQLで複数フィールドから同一語を検索するには・・・ - MySQL - 教えて!goo
  http://oshiete.goo.ne.jp/qa/2634613.html

・char(0)て何でしょうか?

>%データ%は全件を検索するため効率うんぬんを論ずるような仕組みではない
・どういう意味でしょうか?
・全件検索する際は、LIKE検索を使わないのでしょうか? 全文検索エンジン(?)を利用するのでしょうか?
・全件検索しなければ(例えば2カラムだけ)、LIKE検索を利用しても良いのでしょうか?
・あるいは、データ規模が少なければ、LIKE検索を利用しても良いのでしょうか?

>本番ではこんなことはしませんがあくまでも遊びということで
・どういう意味でしょうか?
・concatで LIKE 検索を普通はしない、ということでしょうか?
・それとも、LIKE 検索で、char(0)などのセパレータを挟まない、ということでしょうか?
・あるいは、全件検索でLIKE検索を普通は使わない、ということでしょうか?

複数カラム検索をしたいと思い、リンク先の通り、
WHERE concat(field1,char(0),field2) LIKE "%検索語%"
としたらうまくいったのですが、
そのページに書いてあることが気になるので、教えてください
▽MySQLで複数フィールドから同一語を検索するには・・・ - MySQL - 教えて!goo
  http://oshiete.goo.ne.jp/qa/2634613.html

・char(0)て何でしょうか?

>%データ%は全件を検索するため効率うんぬんを論ずるような仕組みではない
・どういう意味でしょうか?
・全件検索する際は、LIKE検索を使わないのでし...続きを読む

Aベストアンサー

> ・char(0)て何でしょうか?
「検索語にはありえない文字」です。char(0)は、文字コード0の文字。以下の説明では\0と書きます。
例えば、検索語が"%おか%"で、field1="あいうえお"で、field2="かきくけこ"だった場合、
concat(field1,field2)は"あいうえおかきくけこ"となり、検索条件にマッチします。
ところが、concat(field1, char(0), field2) は、"あいうえお\0かきくけこ"となるため、
こうしておけば"%おか%"はマッチしない、ということになります。


> >%データ%は全件を検索するため効率うんぬんを論ずるような仕組みではない
> ・どういう意味でしょうか?

前後にワイルドカードをつけたLIKE 検索(いわゆる「部分位置検索」)は、効率が非常に悪いからです。
通常の検索(完全一致や範囲指定などによる絞り込み)では、DBにインデックスをつけることで、条件に該当するレコードを高速に抽出することができます。
(LIKEを使う場合でも、後ろにだけワイルドカードをつけた「データ%」のような、いわゆる「前方一致検索」は、インデックスが使えるので問題ありません。)

ところが、前にワイルドカードをつけた場合、インデックスが使えませんので、
DBの全レコードを1件ずつ読み込んで条件に合致するかチェックする必要がある、ということになります。
検索にはレコード数に比例した時間がかかるという、非常に効率が悪いものになってしまうのです。

> ・あるいは、データ規模が少なければ、LIKE検索を利用しても良いのでしょうか?

それが問題にならない程度の規模ならLIKEの前後ワイルドカード(部分一致検索)をしてもいいでしょう。

> ・全件検索する際は、LIKE検索を使わないのでしょうか? 全文検索エンジン(?)を利用するのでしょうか?

規模が大きくなった場合には、全文検索エンジンを使うのが基本です。

> ・全件検索しなければ(例えば2カラムだけ)、LIKE検索を利用しても良いのでしょうか?

「例えば2カラムだけ」というのが意味不明ですが、
問題はチェック対象のレコード数(行数)です。カラム数(列数)は問題になりません。
全件検索でなくても、チェック対象のレコード数が多い場合にはLIKE部分一致検索はしない方がいいでしょう。
LIKE検索以外の条件で、チェック対象が十分に絞り込めているなら、LIKE部分一致検索をしても大丈夫ということになります。


> >本番ではこんなことはしませんがあくまでも遊びということで
> ・どういう意味でしょうか?

上述のように性能が出せないので、大規模業務システムではそんなものは使わない、ということです。

> ・あるいは、全件検索でLIKE検索を普通は使わない、ということでしょうか?
LIKE検索でも、「あるカラムのみをチェック対象(LIKEの左辺)」とし、「頭には%をつけない前方一致検索」を行うのであれば問題ありません。

> ・concatで LIKE 検索を普通はしない、ということでしょうか?
> ・それとも、LIKE 検索で、char(0)などのセパレータを挟まない、ということでしょうか?
LIKE対象の前に%をつける「部分一致検索」は普通はしない、ということです。
さらにいうと、あと、カラムそのものではなく、concat した文字列に対してのLIKE 検索だと、「データ%」のような前方一致検索でも、左辺側にインデックスが使えませんので、やっぱり効率が悪くなりますので使えません。

> ・char(0)て何でしょうか?
「検索語にはありえない文字」です。char(0)は、文字コード0の文字。以下の説明では\0と書きます。
例えば、検索語が"%おか%"で、field1="あいうえお"で、field2="かきくけこ"だった場合、
concat(field1,field2)は"あいうえおかきくけこ"となり、検索条件にマッチします。
ところが、concat(field1, char(0), field2) は、"あいうえお\0かきくけこ"となるため、
こうしておけば"%おか%"はマッチしない、ということになります。


> >%データ%は全件を検索するため効率うんぬんを論...続きを読む

Qワードで日付印の文字が表示されない

電子メールでワードの報告書が送られてきました。
承認欄に3人の日付印(丸くて真ん中に日付、上下に苗字)が貼られているのですが1人の印だけ丸のなかに日付しか入っていませんでした。
印刷プレビューでみても入っていません。
しかし他の人のパソコンで開いたところちゃんと苗字まで入っていました。どのようにしたら私のパソコンでも正しく表示できますか?

Aベストアンサー

No.3のasyuです。
ワードの新規画面に問題の部分を貼り付けした場合はいかがでしょうか?
表示される場合は、フォントキャッシュの破損かもしれません。
パソコンをセーフモードで起動して、何もしないで終了しますと回復すると思います。

ワード自体の不具合が考えられる場合は、こちらを試してみてください。
Word 2007、Word 2003、または Word 2002 の起動時または使用時に発生する問題のトラブルシューティング方法
http://support.microsoft.com/kb/921541/ja

Word 2000 起動時に問題が発生する場合の対処方法
http://support.microsoft.com/default.aspx?scid=kb;ja;880994

Qどうしても、%$keyword%でひっかかると、そちらを食ってしまいます。

$sql = "select * from $OP_TNAME where option_settingname_num='$session_option_settingname_num'";
if($optionname[1]!='' && $optionname[1]!='a' && $keyword!=''){
$sql .= " and field1 like '%$keyword%'";
}
for($i=2;$i<=30;$i++){
if($optionname[$i]!='' && $optionname[$i]!='a' && $keyword!=''){
$sql .= " or field".$i." like '%$keyword%'";
}


}
$sql .= " order by nowdate";

上記で、
where option_settingname_num='$session_option_settingname_num'を絶対条件にしたいのですが、うまくいきません。
どうしたらよいでしょうか。
どうぞ宜しくお願い致します。

$sql = "select * from $OP_TNAME where option_settingname_num='$session_option_settingname_num'";
if($optionname[1]!='' && $optionname[1]!='a' && $keyword!=''){
$sql .= " and field1 like '%$keyword%'";
}
for($i=2;$i<=30;$i++){
if($optionname[$i]!='' && $optionname[$i]!='a' && $keyword!=''){
$sql .= " or field".$i." like '%$keyword%'";
}


}
$sql .= " order by nowdate";

上記で、
where option_settingname_num='$session_option_...続きを読む

Aベストアンサー

どううまくいきませんか?

and や or で引っかかっているのならば
括弧をつけてその範囲を明示的にしてやらないと思った通りにならないと思います。


人気Q&Aランキング

おすすめ情報