SQL
まだ未完成ですけど、もうほとんど完成してるのでさらしておきますね。 完成しました! 文字列でスタックを実現しています。 WITH Input(id, str) AS ( -- 1 + 3 / -8 SELECT 1, '1 3 + -8 /' -- 2*3*4*5+99 UNION ALL SELECT 2, '2 3 * 4 * 5 * 99 +' -- 4 …
そういえば(このパターン多いな)、redditだかstackoverflowで、いろんな言語で文字列として与えられた数式をできるだけ短いコードで評価するってのがあったけど、SQLでできる?w Twitter / finalfusion: そういえば(このパターン多いな)、redditだかstack ...…
Server errorもう何でもありです!
Server errorこれはひどい・・・
Server error日付で再帰 SQL 説明するとか馬鹿げてる。数値型使え数値型、という話。 こっちならわけわかる・・・はず!
昨日書いた SQL、よくわからない認定を受けたのでちょっと解説しておきますね。 えー、書いた SQL はこんなのです*1。 WITH Cal(day/*, year*/) AS ( SELECT GETDATE() -- , YEAR(GETDATE()) UNION ALL SELECT DATEADD(dd, 1, day) -- , year FROM Cal WHERE…
どう書く?.org初投稿。 Server error 再帰 WITH さえあれば、SQL って実は日付処理得意だと思うんだ。 カレンダーを再帰 WITH で作って、あとは欲しいものを WHERE でフィルタリングするだけ。 今回のやつは小計求める方法使って、無理矢理一番最後に個数を…
取引先 当月売上合計 当年売上合計 aaa 350 1000 みたいに、当月と当年*1の集計を同時に行いたい場合、 SELECT T.cust_name AS N'取引先' , SUM(CASE MONTH(T.date) WHEN MONTH(GETDATE()) THEN T.sales ELSE 0 END) AS N'当月売上合計' , SUM(T.sales) AS N…
いつも忘れるのでメモ。 SQL Server 2008 の SQL Server Management Studio では、テーブルのデザインを変更しようとしても、 変更の保存が許可されていません。行った変更には、次のテーブルを削除して再作成することが必要になります。再作成できないテー…
「SQLクックブック ―データベースエキスパートのための実践レシピ集」を含むブログ - はてなキーワードで、自分のブログを除いて一番最近のブログのカテゴリ「SQL Server」を読んでびっくり。 はてなダイアリーとか、はてなダイアリーとか、それなんて今日の…
SQL Server 2005 から共通表式が使えるのは知ってて、使いまくってたんだけど、再帰 SQL が使えるとは・・・ 新しい業界標準「SQL99」詳細解説をみると、再帰 SQL には RECURSIVE キーワードが必要っぽいんだけど、SQL Server では RECURSIVE キーワードを使…
使えるんです。 SELECT * FROM SomeTable WHERE col LIKE 'etc[1-9]' AND col2 LIKE '[^0-9]%' ; みたいな感じで。 文字クラスの中では % も _ もそのままの文字として扱える。
なんか numeric とか使うと、小数点以下の桁数指定しても無駄に 0 が出るアプリケーションでの話。 それはいやだということで、A さんが STR 関数使って、 SELECT STR(col, 16, 1) FROM ...; みたいにしてたんだけど、これだとそのアプリケーションでは左寄…
小計行を出したい場合は ROLLUP やら CUBE やらを使うのが普通なんだろうけど、それらが使えない環境というものもあるわけで・・・*1 *2 で、効率無視してでも出したい場合、以下のように書けばいい。 -- 明細行と SELECT Customer.id , Customer.name , Ite…
使う場合は自己責任で。 -- ============================================= -- Author: bleis-tift -- Create date: 2009/5/17 -- Description: サロゲート文字を考慮した文字列長を取得します。 -- ============================================= CREATE …
サロゲート文字*1を含む文字列だと、LEN 関数正しい文字列長を取得出来ない。 -- このSQLを実行すると、1ではなく2が返される SELECT LEN(N'𠮷'); 注意:環境によっては□が表示されるかもしれないけど、実際はつちよし (吉の上が士じゃなくて土) です。 以下…
以下のように記述すれば出来るっぽい。 DECLARE @str AS varchar(max); SET @str = ''; SELECT @str = @str + str FROM SomeTable; SELECT @str; 参考:文字列を集計的に結合する(ユーザー定義関数経由で GROUP BY 対応) カンマ区切りがしたければ、 DECLARE…
SQL Server では文字列の結合に + を使うくせに、文字列の SUM が取れないのは悲しいよな・・・
便利だと思うんだ*1 *2。 例えば、 -- 総積を求める SELECT n.FOLD(*, 1) FROM SomeTable; -- 文字列を全部結合 SELECT str.FOLD(||, '') FROM SomeTable; みたいな。 第二引数を省略すると一番最初の要素が使われる*3とかすると、上の例は -- 総積を求める …
【改訂第3版】 SQLポケットリファレンス (POCKET REFERENCE)作者: 朝井淳出版社/メーカー: 技術評論社発売日: 2009/04/29メディア: 単行本(ソフトカバー)購入: 6人 クリック: 117回この商品を含むブログ (17件) を見るTwitter で、SQL ポケットリファレン…
あったらテーブルとか条件が簡単に差し替えられるのに。
NULLIF 関数って動作の説明は多いけど、それを何に使えばいいのかってあんまり理解されてないんじゃないかと思う。 ってことで、NULLIF 関数の実用的な使い方をいくつか紹介する。 NULLIF 関数の動作 まずは、NULLIF 関数の動作から。 NULLIF 関数は引数を 2…
ちゃんとフォーマット*1する 共通表式もしくはビューを使う これだけ。 つかこれくらいやってくださいマジで。 *1:インデント及び改行
ときどきの雑記帖さん経由で、私のSQLフォーマットをみて、自分の規約もさらしてみる*1 *2。 命名規約 テーブルやビュー、共通表式は Pascal 記法で、複数形とする*3。例えば、Employees とか Works とか ただし、リレーションテーブルはその限りではない。…
そもそも数値で日付やら時間やら持つって一体どういうことかと問い詰めたいけど、それは置いておいて。 SELECT CONVERT( datetime , RIGHT('00' + CAST(col / 10000 AS varchar(2)), 2) + ':' + RIGHT(CAST(col / 100 AS varchar(4)), 2) + ':' + RIGHT(CAST…
一ヶ月くらい前かそれよりもう少し前に、“SELECT * するようなプログラムを書くなボケ” (超意訳)的な主張をしている web ページを読んだのだけど(英語でしたが)、 実際のところどうなんでしょうか。自分はそのページにあった、* でまとめて持ってきてからご…
BigTableは一日最大1000件のペースで増えていく nameを持つが、重複がかなり多い SmallTableは200〜300件のデータ量 nameを持つが、重複は存在しない(PK) SmallTableの一覧をGUIに表示する必要がある ただし、BigTableにnameが同じデータがある場合、マーク…
パフォーマンスは無視する方向で。あとSQL Serverでしか試してない。 no_misssing_seqに抜けのない連番を格納することにする DBに挿入された相対時間を判定するために、自動採番されるidを使用 INSERT時には未確定データと言うことで、-1を入れておく INSERT…
採用試験に挑戦 - 気楽に諸々をみて自分でもやってみたよ。SQL*1で。 問題:座標のグリッド揃え きれいにそろった図形というのはきれいな物です。 図形をそろえる上で、グリッド揃え等が必要になったりするでしょう。 これには座標をある一定のグリッド間隔…
空集合に対しては、NULLを返します。また、NULL値だけの集合は空集合になりますので、やはりNULLを返します。 プログラマのためのSQL第2版 と言うことで、NULLの代わりに0を返してほしければ、 SELECT COALESCE(SUM(hoge), 0) FROM ... とする・・・んだけど…